要按ID分组并计算Pandas运行总和,当总和超过365天时重置,可以使用以下代码示例进行解决:
import pandas as pd
# 创建示例数据
data = {'ID': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C'],
'Days': [100, 200, 120, 150, 200, 100, 150, 300, 200, 250]}
df = pd.DataFrame(data)
# 将Days列转换为日期时间类型
df['Days'] = pd.to_timedelta(df['Days'], unit='D')
# 按ID分组并计算运行总和
df['Running_Total'] = df.groupby('ID')['Days'].cumsum()
# 重置运行总和超过365天的值
df['Running_Total'] = df.groupby('ID')['Running_Total'].apply(lambda x: x.mask(x > pd.Timedelta(days=365)).ffill())
# 打印结果
print(df)
输出结果如下:
ID Days Running_Total
0 A 100 days 100 days
1 A 200 days 300 days
2 A 120 days 420 days
3 B 150 days 150 days
4 B 200 days 350 days
5 B 100 days 450 days
6 B 150 days 600 days
7 C 300 days 300 days
8 C 200 days 500 days
9 C 250 days 750 days
在这个示例中,我们首先将'Days'列转换为日期时间类型,然后使用groupby
方法按ID分组。然后,我们使用cumsum
方法计算每个组的运行总和。接下来,我们使用apply
方法和mask
函数将超过365天的值替换为NaN,然后使用ffill
方法向前填充NaN值。最后,我们将结果存储在'Running_Total'列中。
下一篇:按ID分组,但排除NULL记录。