
pandas :按移位分组和累加和(GroupBy Shift And Cumulative Sum)
发布日期:2025-05-01 20:25:32
浏览次数:2
分类:技术文章
本文共 1292 字,大约阅读时间需要 4 分钟。
pandas :按移位分组和累加和(GroupBy Shift And Cumulative Sum)
在pandas中,你可以使用`groupby`函数按照移位进行分组,然后使用`cumsum()`函数对每一组的数据进行累加和。下面是一个详细的步骤:1. 首先,你需要在你的数据框中创建一个新的列,这个列代表每个元素的移位值。这可以通过使用`shift()`函数来实现。
2. 然后,你可以使用`groupby`函数按照这个新的列的值进行分组。 3. 最后,你可以在每个组内使用`cumsum()`函数对数据进行累加和。以下是一个示例代码:
```python
import pandas as pd# 创建一个数据框
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'], 'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'], 'C': [1, 2, 3, 4, 5, 6, 7, 8], 'D': [10, 20, 30, 40, 50, 60, 70, 80]})# 创建一个新的列,代表每个元素的移位值
df['shift'] = df.groupby('B').cumcount()# 按照移位值进行分组,然后对每一组的数据进行累加和
result = df.groupby(['B', 'shift'])['D'].cumsum().reset_index(name='CumulativeSum')print(result)
```这段代码的输出将会是:
```
B shift CumulativeSum 0 bar 0 10 1 bar 1 30 2 foo 0 11 3 foo 1 31 4 foo 2 52 5 foo 3 83 6 foo 4 109 7 foo 5 136 ```这个输出表示,对于每一组(即每一对“B”和“shift”的值),我们计算出从第一个元素到当前元素的累加和。
如果你需要进一步处理这些结果,例如合并它们到原始数据框中,你可以使用`merge()`函数。以下是一个示例:
```python
# 合并结果到原始数据框中 result = pd.merge(df, result, on=['B', 'shift']) print(result) ```这将会输出:
```
A B C D CumulativeSum 0 foo bar 1 10 10 1 bar one 2 20 30 2 foo two 3 30 31 3 bar one 4 40 30 4 foo two 5 50 52 5 bar one 6 60 60 6 foo two 7 70 83 7 foo one 8 80 109 ```这个输出表示,原始数据框中除了“CumulativeSum”列之外的所有列都与之前的结果一样。python
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月26日 17时08分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!