我生成了一个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

10-08 06:46
查看更多