我需要帮助来绘制一个Pandas Dataframe 与groupby

trnvg8h3  于 2023-03-21  发布在  其他
关注(0)|答案(2)|浏览(145)

我有一个这样的 Dataframe

name=['name1', 'name1', 'name1', 'name1', 'name2', 'name2', 'name3']
date=['2023/01/01', '2023/02/01', '2023/02/01', '2023/03/01', '2023/01/01', '2023/02/01', '2023/01/01', ]
quantity=[5, 3, 15, 10, 5, 15, 10]
site=['site1', 'site1', 'site2', 'site3', 'site1', 'site2', 'site3', ]
df= pd.DataFrame({'name':name, 'date': date, 'quantity': quantity, 'site': site})
df

    name    date    quantity    site
0   name1   2023/01/01  5   site1
1   name1   2023/02/01  3   site1
2   name1   2023/02/01  15  site2
3   name1   2023/03/01  10  site3
4   name2   2023/01/01  5   site1
5   name2   2023/02/01  15  site2
6   name3   2023/01/01  10  site3

然后我做一个群体

df.groupby(by=['name', 'date']).agg({'quantity':['sum'], 'site': ['count']})

                    quantity    site
                    sum         count
name    date        
name1   2023/01/01  5           1
        2023/02/01  18          2
        2023/03/01  10          1
name2   2023/01/01  5           1
        2023/02/01  15          1
name3   2023/01/01  10          1

现在,我想使用x=date和y=sum和count来绘制名称,在本例中,我需要3个图
有人能帮我一下吗?

7d7tgy0s

7d7tgy0s1#

用途:

# remove MultiIndex in columns
df1 = df.groupby(by=['name', 'date']).agg({'quantity': 'sum', 'site': 'count'})

# ploting per name groups
df1.groupby('name').plot()

另一个想法:

for name, g in df1.groupby(level='name'):
    g.droplevel(0).rename_axis(None).plot()
odopli94

odopli942#

可以使用df.plot()进行绘图,在此之前需要重置索引,当前dataFrame有多个索引

df.reset_index(inplace=True)
df.plot(x='date', y='sum')

相关问题