我正在使用pandas来显示数据帧,而我的df看起来是这样的:
Day Hour Name Msg
sunday 10 a b
sunday 11 a b
sunday 11 a b
monday 12 a b
tuesday 10 a b
tuesday 10 a b
现在我想总结一下:
sunday 3
monday 1
tuesday 2
并将此数据放入数据框中,以便我可以绘制它。
任何想法我该怎么办?谢谢!
答案 0 :(得分:3)
print (df.groupby('Day').size())
Day
monday 1
sunday 3
tuesday 2
dtype: int64
然后如果需要绘制bar
:
import matplotlib.pyplot as plt
df.groupby('Day').size().plot.bar()
plt.show()
如果订单od天很重要,请将列Day
转换为ordered categorical:
import matplotlib.pyplot as plt
cat = ['sunday','monday','tuesday']
df.Day = df.Day.astype('category', ordered=True, categories=cat)
df.groupby('Day').size().plot.bar()
plt.show()
如果不想使用categorical
,则另一个解决方案为cat
cat = ['sunday','monday','tuesday']
df.groupby('Day').size().reindex(cat).plot.bar()
plt.show()
:
fatal: setrlimit: Permission denied
答案 1 :(得分:1)
jezrael's answer很棒,但有一种更简单的方式:
df.Day.value_counts()
收率:
sunday 3
tuesday 2
monday 1
Name: Day, dtype: int64
它们按从大到小的顺序排列,这有助于不会丢失任何东西。 如果您希望按给定顺序使用它们,请重新索引到原始订单:
df.Day.value_counts().reindex(df.Day.unique())
,并提供:
sunday 3
monday 1
tuesday 2
Name: Day, dtype: int64
您也可以按照自己喜欢的方式订购它们,并为.reindex()
提供自定义列表。
对于绘图,您可以这样做:
df.Day.value_counts().plot.bar()
或者
df.Day.value_counts().plot.bar(figsize=(2,2))
有关: