首页 > 解决方案 > 在 Pandas 中使用 groupby 时检查某些列的值

问题描述

我有一个这样的数据框

df = pd.DataFrame({'Name': ['Bob', 'Bob', 'Bob', 'Joe', 'Joe', 'Joe'],
                'ID': [1,2,3,4,5,6],
                'Value': [1,1,1,0,0,1]})
df

 Name    ID    Value   
 Bob     1       1          
 Bob     2       1          
 Bob     3       1          
 Joe     4       0          
 Joe     5       0          
 Joe     6       1          

目标是计算一result列。这是通过检查name列中的每个组来完成的,在本例中是 Bob & Joe。

因此,对于每个组,如果value列中的值为 all 1,则result该组的列中的值将全为 1。如果值全为 0,则result该组的列值将全为 0。如果值是1 和 0 的混合,result该组的列将全部为 0。

所以输出应该是这样的:

Name    ID    Value    Result
 Bob     1       1       1   
 Bob     2       1       1   
 Bob     3       1       1   
 Joe     4       0       0   
 Joe     5       0       0   
 Joe     6       1       0   

困难在于创建这些组,然后检查每个组。

我的尝试:

df = df.groupby('Name')

df['Result'] = df.apply(lambda x: x['Value'])

标签: pythonpandasdataframegroup-by

解决方案


all与 一起使用groupby+transform

df['Result'] = df.groupby('Name')['Value'].transform('all').astype(int)
# or df['Result'] = df['Value'].eq(1).groupby(df['Name']).transform('all').astype(int)
print(df)

  Name  ID  Value  Result
0  Bob   1      1       1
1  Bob   2      1       1
2  Bob   3      1       1
3  Joe   4      0       0
4  Joe   5      0       0
5  Joe   6      1       0

推荐阅读