如何在Pandas中按两列分组并基于条件生成新列?
解决方案
针对你的需求,我们可以通过groupby结合条件判断生成目标列,核心是判断每组中是否存在day_num=1,以下是几种高效的实现方法:
方法1:使用any()判断存在性
any()会直接返回组内是否有满足条件的元素(布尔值),转换为整数后即可得到1/0的结果:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'ID': [1,1,1,1,2,2,3], 'week': [1,1,2,2,1,2,1], 'day_num': [2,3,4,1,1,2,4] }) # 分组处理并生成day1列 result = df.groupby(['ID', 'week'])['day_num'].apply(lambda x: int((x == 1).any())).reset_index(name='day1') print(result)
方法2:使用agg()聚合(更简洁)
通过agg直接指定聚合逻辑,代码可读性更强:
result = df.groupby(['ID', 'week']).agg( day1=('day_num', lambda x: 1 if (x == 1).any() else 0) ).reset_index()
方法3:使用sum()统计次数
统计组内day_num=1的数量,只要数量大于0就返回1,否则返回0:
result = df.groupby(['ID', 'week'])['day_num'].apply(lambda x: int((x == 1).sum() > 0)).reset_index(name='day1')
注意事项
- 原代码中
groupby('ID','week')存在语法问题,groupby的分组列需要传入列表,即groupby(['ID', 'week']) - 以上方法均能输出你需要的结果,其中
any()性能最优,因为它找到第一个满足条件的元素后就会停止遍历
内容的提问来源于stack exchange,提问作者kri
相关产品推荐
相关产品推荐

