【发布时间】:2019-03-16 14:49:57
【问题描述】:
我正在尝试在 Pandas Dataframe 中的一个列上放置一个条件,并基于该条件,我想对 Dataframe 中的另一列进行累积总和。这里更清楚的是示例:假设我的 DataFrame df 为:
+-----------+--------------+-----+-------------+
| Date | daily_return | dir | size_return |
+-----------+--------------+-----+-------------+
| 2/25/2015 | -0.000681 | -1 | -0.000681 |
| 2/26/2015 | -0.0015 | -1 | -0.00218 |
| 2/27/2015 | -0.003022 | -1 | -0.005203 |
| 3/2/2015 | 0.005776 | 1 | 0.005776 |
| 3/3/2015 | -0.003772 | -1 | -0.003772 |
| 3/4/2015 | -0.00436 | -1 | -0.00755 |
+-----------+--------------+-----+-------------+
只要dir 中的值等于dir.shift(1),我就在dir 列上设置了一个条件,我想取daily_return 列的累积总和,直到dir 不等于@987654328 @ 并且当它们不相等时,我希望 daily_return 等于 size_return。
我用来生成上表的代码如下:
df['size_return'] = np.where(df.dir == df.dir.shift(1),
df.daily_return.cumsum(axis=0), df.daily_return)
上表的问题是,如果我使用上面的代码行 daily_return 求和,我无法弄清楚为什么最后两行的结果是 -0.00755,我应该得到 @987654334 @ (-0.003772 + -0.00436)。
我上面代码写的逻辑一定有错误,我无法弄清楚我的错误?
其次,我不希望size_return 的每一行中的值仅根据条件过滤数据帧的最后一行。更清楚地说,这是决赛桌的样子:
+-----------+--------------+-----+-------------+
| Date | daily_return | dir | size_return |
+-----------+--------------+-----+-------------+
| 2/25/2015 | -0.000681 | -1 | |
| 2/26/2015 | -0.0015 | -1 | |
| 2/27/2015 | -0.003022 | -1 | -0.005203 |
| 3/2/2015 | 0.005776 | 1 | 0.005776 |
| 3/3/2015 | -0.003772 | -1 | |
| 3/4/2015 | -0.00436 | -1 | -0.008132 |
+-----------+--------------+-----+-------------+
【问题讨论】:
-
cumsum参数在被传递给where之前被评估(完整)。请记住这是 python,而不是一些自定义语言。
标签: python pandas numpy dataframe