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

如何为DataFrame按ID统计X/Y列的行间滚动变更计数?

解决方案

步骤说明

要实现按标识ID分组,计算X/Y列随时间的滚动变更计数,核心逻辑是:

  • 每组第一行的变更计数为0
  • 后续行若与上一行值不同,变更计数为上一行计数+1;若相同则重置为0

完整代码实现

import pandas as pd

# 构建示例DataFrame
data = {
    '标识ID': [123, 123, 123, 124, 124, 124],
    '日期(日/月/年)': ['01/01/2022', '02/01/2022', '03/01/2022', '01/01/2022', '02/01/2022', '03/01/2022'],
    'X': [100, 200, 300, 200, 900, 900],
    'Y': ['abc', 'acb', 'ary', 'abc', 'abc', 'abc']
}
df = pd.DataFrame(data)

# 转换日期格式并按标识ID+日期排序(确保时间顺序正确)
df['日期(日/月/年)'] = pd.to_datetime(df['日期(日/月/年)'], format='%d/%m/%Y')
df = df.sort_values(['标识ID', '日期(日/月/年)']).reset_index(drop=True)

# 定义变更计数计算函数
def calculate_change(col):
    change = [0]
    for idx in range(1, len(col)):
        if col.iloc[idx] != col.iloc[idx-1]:
            change.append(change[-1] + 1)
        else:
            change.append(0)
    return pd.Series(change, index=col.index)

# 分组计算Change X和Change Y列
df['Change X'] = df.groupby('标识ID')['X'].apply(calculate_change)
df['Change Y'] = df.groupby('标识ID')['Y'].apply(calculate_change)

# 查看结果
print(df)

输出结果

标识ID日期(日/月/年)XYChange XChange Y
1232022-01-01100abc00
1232022-01-02200acb11
1232022-01-03300ary22
1242022-01-01200abc00
1242022-01-02900abc10
1242022-01-03900abc00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:40:49