[英]Creating a new column based on values from other columns in python pandas
[英]Python Pandas New Column based on values from other columns
我有一个看起来像这样的 DF。
每个 id 都有列数。 逻辑是查看 T1 并检查程序是否已在 T0 看到。 根据发现,将创建一个新列。 如果在 T0 找到,则新列将具有相同的name
。 如果在 T0 处未看到,则name
会递增,因此它将是_2
。
Python
data = '''id, name, Time, program
1, bb, T0, a1
1, ch, T0, a1
1, cc, T0, b1
1, ch_1, T1, a1
1, ch_1, T1, a2
1, ch_1, T1, a3
1, ch_1, T1, a4
1, cc_1, T1, b1
1, cc_1, T1, b2
1, cc_1, T1, b3
2, dd, T0, c1
2, ch, T0, a1
2, cc, T0, b1
2, ch_1, T1, a1
2, ch_1, T1, a2
2, ch_1, T1, a3
2, cc_1, T1, b1
2, cc_1, T1, b2
2, cc_1, T1, b3'''
da = [[i.strip() for i in l.split(",")] for l in data.split("\n")]
df = pd.DataFrame(da[1:], columns=da[0])
Output
id name Time program
1 bb T0 a1
1 ch T0 a1
1 cc T0 b1
1 ch_1 T1 a1
1 ch_1 T1 a2
1 ch_1 T1 a3
1 ch_1 T1 a4
1 cc_1 T1 b1
1 cc_1 T1 b2
1 cc_1 T1 b3
2 dd T0 c1
2 ch T0 a1
2 cc T0 b1
2 ch_1 T1 a1
2 ch_1 T1 a2
2 ch_1 T1 a3
2 cc_1 T1 b1
2 cc_1 T1 b2
2 cc_1 T1 b3
这是最终预期的 output。
id name Time program new_name
1 bb T0 a1 bb
1 ch T0 a1 ch
1 cc T0 b1 cc
1 ch_1 T1 a1 ch_1
1 ch_1 T1 a2 ch_2 <---
1 ch_1 T1 a3 ch_2 <---
1 ch_1 T1 a4 ch_2 <---
1 cc_1 T1 b1 cc_1
1 cc_1 T1 b2 cc_2 <---
1 cc_1 T1 b3 cc_2 <---
2 dd T0 c1 dd
2 ch T0 a1 ch
2 cc T0 b1 cc
2 ch_1 T1 a1 ch_1
2 ch_1 T1 a2 ch_2 <---
2 ch_1 T1 a3 ch_2 <---
2 cc_1 T1 b1 cc_1
2 cc_1 T1 b2 cc_2 <---
2 cc_1 T1 b3 cc_2 <---
让我们试试apply
+ np.where
,不快但工作
s=df.groupby('id').apply(lambda x : x['Time'].eq('T1') & ~x['program'].isin(x['program'][x['Time'].eq('T0')])).reset_index(level=0,drop=True)
df['New Name']=np.where(s, df['name'].str[:-1]+'2', df['name'])
df
id name Time program New Name
0 1 bb T0 a1 bb
1 1 ch T0 a1 ch
2 1 cc T0 b1 cc
3 1 ch_1 T1 a1 ch_1
4 1 ch_1 T1 a2 ch_2
5 1 ch_1 T1 a3 ch_2
6 1 ch_1 T1 a4 ch_2
7 1 cc_1 T1 b1 cc_1
8 1 cc_1 T1 b2 cc_2
9 1 cc_1 T1 b3 cc_2
10 2 dd T0 c1 dd
11 2 ch T0 a1 ch
12 2 cc T0 b1 cc
13 2 ch_1 T1 a1 ch_1
14 2 ch_1 T1 a2 ch_2
15 2 ch_1 T1 a3 ch_2
16 2 cc_1 T1 b1 cc_1
17 2 cc_1 T1 b2 cc_2
18 2 cc_1 T1 b3 cc_2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.