如何在数据框python中创建累积和? [英] How to create cummulative sum in dataframe python?
本文介绍了如何在数据框python中创建累积和?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何从需求列中在数据框python中创建累积总和(new_supply) 从表
How to create cumulative sum (new_supply)in dataframe python from demand column from table
item Date supply demand
A 2018-01-01 - 10
A 2018-01-02 - 15
A 2018-01-03 100 30
A 2018-01-04 - 10
A 2018-01-05 - 40
A 2018-01-06 50 50
A 2018-01-07 - 10
B 2018-01-01 - 20
B 2018-01-02 - 30
B 2018-01-03 20 60
B 2018-01-04 - 20
B 2018-01-05 100 10
B 2018-01-06 - 20
B 2018-01-07 - 30
上表中的新的所需表
item Date supply demand new_supply
A 2018-01-01 - 10 -
A 2018-01-02 - 15 -
A 2018-01-03 100 30 55
A 2018-01-04 - 10 -
A 2018-01-05 - 40 -
A 2018-01-06 50 50 100
A 2018-01-07 - 10 -
B 2018-01-01 - 20 -
B 2018-01-02 - 30 -
B 2018-01-03 20 60 110
B 2018-01-04 - 20 -
B 2018-01-05 100 10 140
B 2018-01-06 - 20 -
B 2018-01-07 - 30 -
推荐答案
我相信您需要 numpy.where
与 isnumeric
,仅用于为supply
列的数字值设置新值:
I believe you need DataFrameGroupBy.cumsum
with numpy.where
with isnumeric
for set new values only for numeric ones by column supply
:
m = df['supply'].str.isnumeric()
g = m.iloc[::-1].cumsum()
df['new'] = np.where(m, df.groupby(['item',g])['demand'].cumsum(), '-')
print (df)
item Date supply demand new
0 A 2018-01-01 - 10 -
1 A 2018-01-02 - 15 -
2 A 2018-01-03 100 30 55
3 A 2018-01-04 - 10 -
4 A 2018-01-05 - 40 -
5 A 2018-01-06 50 50 100
6 A 2018-01-07 - 10 -
7 B 2018-01-01 - 20 -
8 B 2018-01-02 - 30 -
9 B 2018-01-03 20 60 110
10 B 2018-01-04 - 20 -
11 B 2018-01-05 100 10 30
12 B 2018-01-06 - 20 -
13 B 2018-01-07 - 30 -
或者:
m = df['supply'].str.isnumeric()
df['new'] = np.where(m, df.groupby('item')['demand'].cumsum(), '-')
print (df)
item Date supply demand new
0 A 2018-01-01 - 10 -
1 A 2018-01-02 - 15 -
2 A 2018-01-03 100 30 55
3 A 2018-01-04 - 10 -
4 A 2018-01-05 - 40 -
5 A 2018-01-06 50 50 155
6 A 2018-01-07 - 10 -
7 B 2018-01-01 - 20 -
8 B 2018-01-02 - 30 -
9 B 2018-01-03 20 60 110
10 B 2018-01-04 - 20 -
11 B 2018-01-05 100 10 140
12 B 2018-01-06 - 20 -
13 B 2018-01-07 - 30 -
如果需要所有值:
df['new'] = df.groupby('item')['demand'].cumsum()
print (df)
item Date supply demand new
0 A 2018-01-01 - 10 10
1 A 2018-01-02 - 15 25
2 A 2018-01-03 100 30 55
3 A 2018-01-04 - 10 65
4 A 2018-01-05 - 40 105
5 A 2018-01-06 50 50 155
6 A 2018-01-07 - 10 165
7 B 2018-01-01 - 20 20
8 B 2018-01-02 - 30 50
9 B 2018-01-03 20 60 110
10 B 2018-01-04 - 20 130
11 B 2018-01-05 100 10 140
12 B 2018-01-06 - 20 160
13 B 2018-01-07 - 30 190
这篇关于如何在数据框python中创建累积和?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文