python - 在 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'])
解决方案
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
推荐阅读
- php - 用户购买产品时,如何在 ACF 字段中自动添加文本?(PHP/WordPress)
- css - 如何在 Rails 6 中让 CSS 在 Heroku 上运行
- exception - 关于 ASP.NET Core MVC Null Exception 错误处理的问题
- c++ - 在 C++ 中,是否可以使用指针魔法同时修改多个结构对象?
- mongodb - 在 MongoDB 中使用 $or 进行更新时出现问题,错误:更新操作文档必须包含原子操作符
- php - 将剩余物品放在新行中
- reactjs - 在带有 react-router 的 react-static 中,如何访问路由模板中的 props.location?
- laravel - 如何从全局范围内获取模型 ID
- sql-server - 如何从 SQL Server 2019 的历史记录表中排除计算列?
- php - 一个简单的问题:切换到静态html模式并返回,或者在不同平台停留在执行模式