我有一个这样的数据框
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
列中的值均为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'])
答案 0 :(得分:4)
将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
答案 1 :(得分:2)
IIUC
df['Result']=df.groupby('Name').Value.all().reindex(df.Name).astype(int).values
df
Out[57]:
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