Pandas Groupby:对不同列执行cumsum()后出现警告消息
我从excel导入了下表:Pandas Groupby:对不同列执行cumsum()后出现警告消息,pandas,Pandas,我从excel导入了下表: sheet5=pd.read_excel(data, 'Sheet5').set_index('item') display(sheet5) x y days item A 0.2076 0.0000 4 A 0.0000 0.0000 1 A 55.9240 39.8879 31 A 54.5062 46.2022 30 A 38.6522 32.9306 31 A 27.58
sheet5=pd.read_excel(data, 'Sheet5').set_index('item')
display(sheet5)
x y days
item
A 0.2076 0.0000 4
A 0.0000 0.0000 1
A 55.9240 39.8879 31
A 54.5062 46.2022 30
A 38.6522 32.9306 31
A 27.5890 25.7896 30
A 23.4207 21.9209 31
A 21.1067 18.6405 31
B 4.7236 4.4775 6
B 1.6416 1.1710 1
B 0.6177 0.0000 1
B 68.6652 45.7007 30
B 85.6364 61.6806 30
B 56.0095 43.1121 30
B 38.9339 25.0558 31
B 45.6508 33.9727 31
B 37.6672 32.0657 30
B 31.1604 29.2204 31
B 26.0266 24.9480 30
然后,我进入“项目”列的“分组方式”,并计算一个累积总和
df=sheet5.groupby(['item'])['x', 'y', 'days'].cumsum()
display(df)
x y days
item
A 0.20 0.00 4
A 0.20 0.00 5
A 56.13 39.88 36
A 110.63 86.09 66
A 149.29 119.02 97
A 176.87 144.81 127
A 200.29 166.73 158
A 221.40 185.37 189
B 4.72 4.47 6
B 6.36 5.64 7
B 6.98 5.64 8
B 75.64 51.34 38
B 161.28 113.02 68
B 217.29 156.14 98
B 256.22 181.19 129
B 301.87 215.17 160
B 339.54 247.23 190
B 370.70 276.45 221
B 396.73 301.40 251
我得到以下警告:
<ipython-input-83-f4f50b80623a>:3: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.
df=sheet5.groupby(['item'])['x', 'y', 'days'].cumsum()
:3:FutureWarning:将不推荐使用多个键(隐式转换为键的元组)进行索引,请改用列表。
df=sheet5.groupby(['item'])['x','y','days'].cumsum()
我有一些问题:
谢谢1/使用
dataframe.groupby
(即用双方括号包装列)
2/我猜groupby上的cumsum
通过强制groupby的split apply combine
过程的combine
步骤使用原始索引,如transform
。这只是我的猜测,因为我还没有检查groupby.cumsum
的源代码
3/对于您编辑的问题3,您可以在项目上进行相同的分组,但在系列上进行cumsum
。在天数列上进行分组
df['days_c'] = df.groupby('item')['days'].cumsum()
Out[876]:
x y days days_c
item
A 0.2076 0.0000 4 4
A 0.0000 0.0000 1 5
A 55.9240 39.8879 31 36
A 54.5062 46.2022 30 66
A 38.6522 32.9306 31 97
A 27.5890 25.7896 30 127
A 23.4207 21.9209 31 158
A 21.1067 18.6405 31 189
B 4.7236 4.4775 6 6
B 1.6416 1.1710 1 7
B 0.6177 0.0000 1 8
B 68.6652 45.7007 30 38
B 85.6364 61.6806 30 68
B 56.0095 43.1121 30 98
B 38.9339 25.0558 31 129
B 45.6508 33.9727 31 160
B 37.6672 32.0657 30 190
B 31.1604 29.2204 31 221
B 26.0266 24.9480 30 251
如果可以的话,还有一个问题。关于我的第三个问题,是否可以在x和y列中使用sum(),在days列()中使用cumsum()?cumsum
累积地添加每一行并返回相同数量的行sum
将减少每组项的行数
。您想要的输出是什么?你能为问题3添加所需的输出吗?嗨,安迪,我编辑了问题3。我想在days列中执行cumsum,其余部分保持在原始数据帧中。最后,我想获得一个包含所有原始列和cumsum()列的数据帧。我尝试使用sheet5['days\u c']=sheet5.groupby['days'].cumsum(),但没有得到我想要的结果expected@Pablo:我编辑了问题3的答案。检查我的最新答案hi@Andy L.一切都很完美。非常感谢你!
df['days_c'] = df.groupby('item')['days'].cumsum()
Out[876]:
x y days days_c
item
A 0.2076 0.0000 4 4
A 0.0000 0.0000 1 5
A 55.9240 39.8879 31 36
A 54.5062 46.2022 30 66
A 38.6522 32.9306 31 97
A 27.5890 25.7896 30 127
A 23.4207 21.9209 31 158
A 21.1067 18.6405 31 189
B 4.7236 4.4775 6 6
B 1.6416 1.1710 1 7
B 0.6177 0.0000 1 8
B 68.6652 45.7007 30 38
B 85.6364 61.6806 30 68
B 56.0095 43.1121 30 98
B 38.9339 25.0558 31 129
B 45.6508 33.9727 31 160
B 37.6672 32.0657 30 190
B 31.1604 29.2204 31 221
B 26.0266 24.9480 30 251