我用:
生成了Panda的DataFramedata={'id': [1.0, 1, 2, 3, 3, 3, 4.0,4.0,5,5],'some':['Yes','No','No','Yes','Yes','Yes','No','No','No','Yes']}
df=DataFrame(data)
在这个DataFrame中,我想添加一个列" someIDlevel"其中包含" some"信息"在ID"水平。以下规则适用:在ID中,至少有一个"是" in" some"而不是" someIdlevel"对于那个特定的" id"应该是全部是,否则它应该是" No"对于那个特定的ID。
所以最终的数据框应该看起来好像是由这段代码创建的:
data_fin={'id': [1.0, 1, 2, 3, 3, 3, 4.0,4.0,5,5],'some':'Yes','No','No','Yes','Yes','Yes','No','No','No','Yes'],'someIDlevel':['Yes','Yes','No','Yes','Yes','Yes','No','No','Yes','Yes']} df_fin=pd.DataFrame(data_fin)
答案 0 :(得分:1)
您可以执行以下操作。
首先在merge
上执行左侧groupby
:
df = pd.merge(
df,
df.some.groupby(df.id).apply(lambda g: 'Yes' if 'Yes' in g.values else 'No').reset_index(),
how='left')
然后,只需将新列重命名为您想要的名称:
>>> df.rename(columns={0: 'someIdlevel'})
id some someIdlevel
0 1 Yes Yes
1 1 No Yes
2 2 No No
3 3 Yes Yes
4 3 Yes Yes
5 3 Yes Yes
6 4 No No
7 4 No No
8 5 No Yes
9 5 Yes Yes