如何在 Pandas 中进行条件 运行 求和?
How to make conditional running sums in Pandas?
我需要对 Pandas 中的两列进行条件累加和计算。
假设我想对工人在不同季度的销售额求和:
df = pd.DataFrame({'Worker': [A, A, B, B, C, C, D, D], 'Quarter': ['Test 1', 'Test 2', 'Test 1', 'Test 2', 'Test 1', 'Test 2', 'Test 1', 'Test 2'], 'Grade': [10,8,7,6,8,10,5,7]})
df
Worker Quarter Sales
0 A Q1 10
1 A Q2 8
2 B Q1 7
3 B Q2 6
4 C Q1 8
5 C Q2 10
6 D Q1 5
7 D Q2 7
给我这样的结果:
Worker Quarter Sales
0 A Q1 10
1 A Q2 18
2 B Q1 7
3 B Q2 13
4 C Q1 8
5 C Q2 18
6 D Q1 5
7 D Q2 12
最快的方法是什么?我正在尝试嵌套 for 循环,但它们非常难看,而且在更长的数据库中我担心会丢失一些东西。
尝试 groupby
和 cumsum
df['Sales'] = df.groupby('Worker')['Sales'].cumsum()
您可以将 cumsum 与转换结合使用:
df['Sales'] = df.groupby('Worker')['Sales'].transform(pd.Series.cumsum)
输出:
Worker Quarter Sales
0 A Q1 10
1 A Q2 8
2 B Q1 7
3 B Q2 6
4 C Q1 8
5 C Q2 10
6 D Q1 5
7 D Q2 7
我需要对 Pandas 中的两列进行条件累加和计算。
假设我想对工人在不同季度的销售额求和:
df = pd.DataFrame({'Worker': [A, A, B, B, C, C, D, D], 'Quarter': ['Test 1', 'Test 2', 'Test 1', 'Test 2', 'Test 1', 'Test 2', 'Test 1', 'Test 2'], 'Grade': [10,8,7,6,8,10,5,7]})
df
Worker Quarter Sales
0 A Q1 10
1 A Q2 8
2 B Q1 7
3 B Q2 6
4 C Q1 8
5 C Q2 10
6 D Q1 5
7 D Q2 7
给我这样的结果:
Worker Quarter Sales
0 A Q1 10
1 A Q2 18
2 B Q1 7
3 B Q2 13
4 C Q1 8
5 C Q2 18
6 D Q1 5
7 D Q2 12
最快的方法是什么?我正在尝试嵌套 for 循环,但它们非常难看,而且在更长的数据库中我担心会丢失一些东西。
尝试 groupby
和 cumsum
df['Sales'] = df.groupby('Worker')['Sales'].cumsum()
您可以将 cumsum 与转换结合使用:
df['Sales'] = df.groupby('Worker')['Sales'].transform(pd.Series.cumsum)
输出:
Worker Quarter Sales
0 A Q1 10
1 A Q2 8
2 B Q1 7
3 B Q2 6
4 C Q1 8
5 C Q2 10
6 D Q1 5
7 D Q2 7