pandas GroupBy 绘制每个组
Posted
技术标签:
【中文标题】pandas GroupBy 绘制每个组【英文标题】:pandas GroupBy plotting each group 【发布时间】:2019-06-12 11:58:23 【问题描述】:我有一些数据,我想从中提取不同产品(x
和 y
)的收入时间序列(Day
在不同日期Day
在不同地点的总和Where
)。
import pandas as pd
#Create data
data = 'Day': [1,1,2,2,3,3],
'Where': ['A','B','A','B','B','B'],
'What': ['x','y','x','x','x','y'],
'Dollars': [100,200,100,100,100,200]
index = range(len(data['Day']))
columns = ['Day','Where','What','Dollars']
df = pd.DataFrame(data, index=index, columns=columns)
df
为此,我按Day
和What
对数据进行分组,并对Dollars
求和:
#Group by Day and What and sum Dollars (for each Where)
print(df.groupby(['Day', 'What'])['Dollars'].sum())
现在,我想为x
和y
制作一个时间序列,如下所示:
我尝试了以下方法,但显然不起作用:
items = df.What.unique()
ax = plt.figure()
for item in items:
df_tmp = df[['Day']][df.What == item]
plt.plot(df_tmp['Day'],df_tmp,'.-',label=item)
请有人帮我指出正确的方向吗? 有没有更快的方法来获得正确的结果?
【问题讨论】:
【参考方案1】:IIUC、unstack
和情节:
(df.groupby(['Day', 'What'])['Dollars']
.sum()
.unstack('What', fill_value=0)
.plot())
plt.show()
【讨论】:
超快快递..!! +1 :) @coldspeed 你知道我可以对生成的数据帧进行切片吗?例如,我想获得第一个时间序列,但df[:][0]
不起作用。提前致谢!
@shamalaia df.iloc[:, 0]
以上是关于pandas GroupBy 绘制每个组的主要内容,如果未能解决你的问题,请参考以下文章
group的加权平均值不等于pandas groupby中的总平均值