【问题标题】:pandas frame cumulative sum conditioned熊猫数据框累积和条件
【发布时间】:2021-01-30 17:35:49
【问题描述】:

有没有办法根据另一列的值对列中的值进行累加,但在不再遵守条件后,重置累加?在下图中,条件因子是 'Rbin' 等于 1。

random_data_frame = pandas.DataFrame()
random_data_frame['Rbin'] = [0,1,1,1,0,0,1,0]
random_data_frame['Rmomentum'] = [-0.07,0.03,0.06,0.005,-0.008,-0.8,0.8,-0.5]

【问题讨论】:

  • 也许可以,但我们无法测试,因为数据是不可重现的image:(
  • 我认为它很容易重现。我留下了一个熊猫数据框作为示例来计算我在图像中说明的最后一列
  • stackoverflow.com/questions/41420822/… 答案 2 有您的代码。只需调整它并将其放入您的版本中即可。
  • @PaulBrennan 是的,我也看到了这个答案,但困难在于形成应用 groupby cumsum 函数的列的想法。无论如何,感谢您的帮助:D

标签: python pandas cumsum


【解决方案1】:

您可以创建一个临时索引来识别Rbin 值的连续序列,然后在这些序列上使用groupbycumsum 并将Rbin 为零的累积和设置为np.nan 值.

random_data_frame['new_id'] = (random_data_frame.Rbin.diff() != 0).cumsum()
random_data_frame['cumulative_sum'] = random_data_frame.groupby('new_id')['Rmomentum'].cumsum().reset_index()['Rmomentum']
random_data_frame.loc[random_data_frame.Rbin == 0, 'cumulative_sum'] = np.nan

这是您示例的结果:

   Rbin  Rmomentum  new_id  cumulative_sum
0     0     -0.070       1             NaN
1     1      0.030       2           0.030
2     1      0.060       2           0.090
3     1      0.005       2           0.095
4     0     -0.008       3             NaN
5     0     -0.800       3             NaN
6     1      0.800       4           0.800
7     0     -0.500       5             NaN

压缩版本是:

random_data_frame['cumulative_sum'] = np.where(
    random_data_frame.Rbin == 0,
    np.nan,
    random_data_frame.groupby((random_data_frame.Rbin.diff() != 0).cumsum())['Rmomentum'].cumsum().reset_index()['Rmomentum']
)

【讨论】:

    猜你喜欢
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多