Python - Panda的数据帧 - 生成具有组级信息的列

时间:2016-02-26 12:54:09

标签: python pandas dataframe

我用:

生成了Panda的DataFrame
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)

在这个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)

1 个答案:

答案 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