基于列的条件累加

xnd*_*ndr 7 python numpy pandas

给定以下数据框,如何生成条件累积总和列。

import pandas as pd
import numpy as np

data = {'D':[2015,2015,2015,2015,2016,2016,2016,2017,2017,2017], 'Q':np.arange(10)}
df = pd.DataFrame(data)

          D  Q
    0  2015  0
    1  2015  1
    2  2015  2
    3  2015  3
    4  2016  4
    5  2016  5
    6  2016  6
    7  2017  7
    8  2017  8
    9  2017  9
Run Code Online (Sandbox Code Playgroud)

累计总和将整列相加。我正在尝试弄清楚如何将np.cumsum与条件函数一起使用。

df['Q_cum'] = np.cumsum(df.Q)

      D  Q  Q_cum
0  2015  0      0
1  2015  1      1
2  2015  2      3
3  2015  3      6
4  2016  4     10
5  2016  5     15
6  2016  6     21
7  2017  7     28
8  2017  8     36
9  2017  9     45
Run Code Online (Sandbox Code Playgroud)

但我打算根据特定列创建累积总和。在这个例子中,我想要它的D列。类似于以下数据框:

      D  Q  Q_cum
0  2015  0      0
1  2015  1      1
2  2015  2      3
3  2015  3      6
4  2016  4      4
5  2016  5      9
6  2016  6     15
7  2017  7      7
8  2017  8     15
9  2017  9     24
Run Code Online (Sandbox Code Playgroud)

Asi*_* M. 9

>>> df['Q_cum'] = df.groupby('D').cumsum()
>>> df
      D  Q  Q_cum
0  2015  0      0
1  2015  1      1
2  2015  2      3
3  2015  3      6
4  2016  4      4
5  2016  5      9
6  2016  6     15
7  2017  7      7
8  2017  8     15
9  2017  9     24
Run Code Online (Sandbox Code Playgroud)

正如@Ayhan 所说,如果你想cumsum在一个特定的列上(比如这里的 Q)df.groupby('D')['Q'].cumsum()

  • 如果原始 df (`df.groupby('D')['Q'].cumsum()`) 中有其他列,您可能想要选择列 Q (3认同)