问题描述
我正在使用方法链接,当col_2
时使用col_1==0
的值创建一个新列。
np.random.seed(1)
df = pd.DataFrame({'group':list('AAABBBCCDDDD'),'col_1': [-1,1,-1,2],'col_2': np.random.randint(0,10,12)})
group col_1 col_2
0 A -1 5
1 A 0 8
2 A 1 9
3 B -1 5
4 B 0 0
5 B 1 0
6 C 0 1
7 C 1 7
8 D -1 6
9 D 0 9
10 D 1 2
11 D 2 4
所需的输出:
group col_1 col_2 new_col
0 A -1 5 8
1 A 0 8 8
2 A 1 9 8
3 B -1 5 0
4 B 0 0 0
5 B 1 0 0
6 C 0 1 1
7 C 1 7 1
8 D -1 6 9
9 D 0 9 9
10 D 1 2 9
11 D 2 4 9
我使用groupby transform
的方法(我很乐意这样做,但显然只转换访问单个列):
df.assign(
new_col = lambda df_: df_.groupby('group').transform(lambda x: x.loc[x.col_1==0].col_2)
)
AttributeError: 'Series' object has no attribute 'col_1'
在编写此问题时想出这个解决方案,但以为我还是会发布:
df.assign(
new_col = lambda df_: df_.merge(df.groupby('group')
.apply(lambda x: x.loc[x.col_1==0].col_2)
.reset_index().rename(columns={'col_2':'new_col'}),on='group'
).new_col
)
有更好的方法吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)