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

上一篇:pandas :检测一个DF和另一个DF之间缺失的列
下一篇:pandas :我如何对堆叠的条形图进行分组?

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月26日 17时08分00秒

关于作者

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

推荐文章