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

如何基于其他列值生成multi_index列?按ID组判断date_int首尾值

实现方法

可以用Pandas的分组(groupby)功能快速实现需求,核心思路是按ID分组后,判断每组date_int列的首尾值是否均为yes,再将结果映射到组内所有行。

方案一:使用transform直接生成列(推荐)

这种方式无需额外合并操作,直接通过transform将分组判断结果广播到每一行:

import pandas as pd

# 构造示例数据(实际使用时替换为你的数据源)
data = {
    'ID': [1,1,1,1,1,1,2,2,2,2,2,2],
    'A': ['activity1','activity2','activity3','activity4','activity5','activity6','activity7','activity8','activity9','activity10','activity11','activity12'],
    'index': [1,2,3,4,5,6,1,2,3,4,5,6],
    'timestamp': ['2021-02-01 12:03:20','2021-02-11 12:03:20','2021-11-23 11:46:40','2021-11-24 11:46:40','2021-11-25 11:46:40','2021-11-26 11:46:40','2021-03-01 12:03:20','2021-03-11 12:03:20','2021-12-23 11:46:40','2021-12-27 11:46:40','2021-12-28 11:46:40','2021-12-29 11:46:40'],
    'date_int': ['yes','no','no','no','no','no','yes','no','no','no','no','yes']
}
df = pd.DataFrame(data)

# 生成multi_index列
df['multi_index'] = df.groupby('ID')['date_int'].transform(
    lambda x: 'yes' if x.iloc[0] == 'yes' and x.iloc[-1] == 'yes' else 'no'
)

print(df)

方案二:先分组计算结果再合并

如果需要单独查看每组的判断逻辑,可先计算分组结果,再合并回原数据:

import pandas as pd

# 构造示例数据
data = {
    'ID': [1,1,1,1,1,1,2,2,2,2,2,2],
    'A': ['activity1','activity2','activity3','activity4','activity5','activity6','activity7','activity8','activity9','activity10','activity11','activity12'],
    'index': [1,2,3,4,5,6,1,2,3,4,5,6],
    'timestamp': ['2021-02-01 12:03:20','2021-02-11 12:03:20','2021-11-23 11:46:40','2021-11-24 11:46:40','2021-11-25 11:46:40','2021-11-26 11:46:40','2021-03-01 12:03:20','2021-03-11 12:03:20','2021-12-23 11:46:40','2021-12-27 11:46:40','2021-12-28 11:46:40','2021-12-29 11:46:40'],
    'date_int': ['yes','no','no','no','no','no','yes','no','no','no','no','yes']
}
df = pd.DataFrame(data)

# 按ID分组,提取首尾date_int并判断
group_result = df.groupby('ID')['date_int'].agg(
    first_val='first',
    last_val='last'
).assign(
    multi_index=lambda x: x.apply(lambda row: 'yes' if row['first_val'] == 'yes' and row['last_val'] == 'yes' else 'no', axis=1)
)

# 合并结果到原数据
df = df.merge(group_result['multi_index'], on='ID', how='left')

print(df)

两种方案最终都会生成符合要求的multi_index列,运行后输出的结果与你提供的示例一致。

内容的提问来源于stack exchange,提问作者mattiadt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:45:46