【问题标题】:pandas GroupBy plotting each grouppandas GroupBy 绘制每个组
【发布时间】:2019-06-12 11:58:23
【问题描述】:

我有一些数据,我想从中提取不同产品(xy)的收入时间序列(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

为此,我按DayWhat 对数据进行分组,并对Dollars 求和:

#Group by Day and What and sum Dollars (for each Where)
print(df.groupby(['Day', 'What'])['Dollars'].sum())

现在,我想为xy 制作一个时间序列,如下所示:

我尝试了以下方法,但显然不起作用:

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)

请有人帮我指出正确的方向吗? 有没有更快的方法来获得正确的结果?

【问题讨论】:

    标签: python pandas dataframe matplotlib pandas-groupby


    【解决方案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]
    猜你喜欢
    • 2018-05-13
    • 2017-03-07
    • 2022-01-19
    • 2019-01-08
    • 2020-09-11
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多