基于列的条件累加求和

8

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

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

累加和将整个列相加。我正在尝试弄清如何使用带有条件函数的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

但我想根据特定列创建累加和。在这个例子中,我想通过 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
1个回答

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

正如@ Ayhan所说,如果您想在特定列(例如此处的Q)上进行cumsum操作,则可以使用df.groupby('D')['Q'] .cumsum()


3
如果原始数据框中存在其他列 (df.groupby('D')['Q'].cumsum()),您可能需要选择列 Q。 - ayhan
@M. Klugerford,谢谢!我也是这么想的,但我不确定如何整合它。 - sandrosil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接