You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:11:31