[英]Running sum of most recent members of each group
這是輸入數據框:
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和B,每個組都有1行,因此您必須從每個行中取出那一行組。
2)id = 2的行具有-1 = -3 + 2,因為那時您有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行,這是該點最近的行。
這應該是使用循環的相對快速簡便的方法。 它的工作方式是在找到字典時就向字典添加新條目。 如果該條目已經存在,它將覆蓋相應的值。
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())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.