pandas在另一列的groupby之后绘制列的不同值

时间:2018-03-11 09:03:48

标签: python pandas matplotlib

我想在图表上绘制2个折线图,x轴为月,y轴为每个城市每个月的计数。

我在一个月内分组来计算每个城市的数量。

我的df:

city month 
A      1
A      2
A      2
B      2
B      3
C      3

df['city'].groupby(df['month']).size().plot()

我希望看到2个折线图,1个用于A,1个用于B,用于x轴上的每个月。

上面的代码只给了我每个月的积累,但我希望每个城市的细分

enter image description here

如何为城市列的不同值设置2个折线图?

1 个答案:

答案 0 :(得分:1)

我认为您需要groupby size进行统计并按unstack重新整形,最后一个过滤列(城市)subset

df.groupby(['month', 'city']).size().unstack(fill_value=0)[['A','B']].plot()

类似:

pd.crosstab(df['month'], df['city'])[['A','B']].plot()

对于情节,所有城市都可以省略子集[[]]

如果想过滤最重要的数量:

top = df['city'].value_counts().head(2).index
df.query('city in @top').groupby(['month', 'city']).size().unstack(fill_value=0).plot()