以下是输入数据框:
id val
0 A 1
1 B 2
2 A -3
3 C 1
4 D 5
5 B 6
6 C -2
我想按ID对条目进行分组,然后计算到目前为止看到的每个组的最近成员的运行总和。以下是所需输出的外观,并说明如何获得:
id val out
0 A 1 1
1 B 2 3 (2 + 1)
2 A -3 -1 (-3 + 2)
3 C 1 0 (1+ -3 +2)
4 D 5 5 (5 + 1 + -3 + 2_
5 B 6 9 (6 + 5 + 1 + -3)
6 C -2 6 (-2 + 6 + 5 -3)
以下是一些更详细的解释: 1)id = 1的行有3 = 2 + 1,因为那时你有2个组,As和Bs,每个都有1行,所以你必须从每个组中取出那一行。
2)id = 2的行有-1 = -3 + 2,因为那时你有两组,As和Bs。 As的最新行是2 A -3
,而Bs中的单行(也就是最近的行)是1 B 2
,所以你要添加这两行。
3)在id = 6的行中,你加起来
2 A -3
4 D 5
5 B 6
6 C -2
您从每个组中获取1行,这是此时最新的行。
答案 0 :(得分:0)
使用循环这应该是一种相对快速简便的方法。它的工作方式是,只要找到一个字典,就会在字典中添加一个新条目。如果条目已存在,则覆盖相应的值。
df = pd.DataFrame({'id': ['A','B','A','C','D','B','C'],
'val': [1,2,-3,1,5,6,-2]})
num_rows = df.shape[0]
last_vals = {}
for i in range(0, num_rows):
x = df['id'][i]
last_vals[x] = df['val'][i]
sum(last_vals.values())