Jos*_*osh 2 python dataframe pandas
我有一只DataFrame看起来如下的熊猫:
sample = pd.DataFrame([[2,3],[4,5],[6,7],[8,9]],
index=pd.date_range('2017-08-01','2017-08-04'),
columns=['A','B'])
A B
2017-08-01 2 3
2017-08-02 4 5
2017-08-03 6 7
2017-08-04 8 9
Run Code Online (Sandbox Code Playgroud)
我想将这些值累加到列中.以列A为例,第二行变为2*4第三行2*4*6,最后一行变为2*4*6*8.B列也是如此.所以,期望的结果是:
A B
2017-08-01 2 3
2017-08-02 8 15
2017-08-03 48 105
2017-08-04 384 945
Run Code Online (Sandbox Code Playgroud)
必须有一些内置的方法来做到这一点,但由于链式分配问题,我甚至在使用for循环时遇到了问题.
out = sample.cumprod()
print(out)
A B
2017-08-01 2 3
2017-08-02 8 15
2017-08-03 48 105
2017-08-04 384 945
Run Code Online (Sandbox Code Playgroud)
您还可以使用np.cumprod值:
sample[:] = np.cumprod(sample.values, axis=0)
print(sample)
A B
2017-08-01 2 3
2017-08-02 8 15
2017-08-03 48 105
2017-08-04 384 945
Run Code Online (Sandbox Code Playgroud)
最后,使用itertools.accumulate(只是为了好玩):
from itertools import accumulate
from operator import mul
pd.DataFrame(np.column_stack([
list(accumulate(sample[c], mul)) for c in sample.columns]),
index=sample.index,
columns=sample.columns)
A B
2017-08-01 2 3
2017-08-02 8 15
2017-08-03 48 105
2017-08-04 384 945
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |