本文共 1473 字,大约阅读时间需要 4 分钟。
在pandas中,按移位分组和累加和是一种强大的操作,可以帮助你对数据进行逐步聚合和计算。这种方法非常适合处理需要逐步累加的数据场景。
要实现这一点,你需要以下几个步骤:
创建移位列:首先,你需要在数据框中创建一个新的列,这个列表示每个元素的移位值。你可以使用shift()函数来实现。这个函数会为每个元素生成一个移位值,表示它在分组中的位置。
分组操作:接下来,你可以使用groupby函数按照移位列的值进行分组。每个组内的数据会按照移位值进行分组。
累加和:然后,你可以对每个组内的数据进行累加和操作。使用cumsum()函数可以轻松实现这一点,它会对每个组内的数据逐步累加,生成累加和结果。
以下是一个详细的代码示例:
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 CumulativeSum0 bar 0 101 bar 1 302 foo 0 113 foo 1 314 foo 2 525 foo 3 836 foo 4 1097 foo 5 136
输出结果表明,对于每一组(即每一对“B”和“shift”的值),我们计算出从第一个元素到当前元素的累加和。
如果你需要将结果合并到原始数据框中,可以使用merge()函数:
result = pd.merge(df, result, on=['B', 'shift'])print(result)
合并后的结果如下:
A B C D CumulativeSum0 foo bar 1 10 101 bar one 2 20 302 foo two 3 30 313 bar three 4 40 304 foo two 5 50 525 bar one 6 60 606 foo two 7 70 837 foo one 8 80 109
这个结果表明,原始数据框中除了“CumulativeSum”列之外的所有列都与之前的结果一致。
转载地址:http://rsvfk.baihongyu.com/