我生成了一个Panda的数据帧:
data={'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)
在这个数据框中,我想添加一个列“some ID level”,其中包含ID“级别的”some“信息”。以下规则适用:当一个ID内的“some”中至少有一个“Yes”而不是“someIdlevel”时,对于这个特定的“ID”应该都是Yes,否则对于那个特定的ID应该是“No”。
因此,最终的数据帧应该看起来像是由以下代码创建的:
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)
最佳答案
你可以这样做。
首先在a上执行左-merge
:
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