Python的大熊猫 -
问题描述:
我使用大熊猫以示数据帧合并dataframes行,我的DF看起来像这样:Python的大熊猫 -
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
和把这些数据放在一个数据框中,这样我就可以绘制它。
任何想法我该怎么做?谢谢!
答
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
,另一种解决方案是reindex
通过cat
:
cat = ['sunday','monday','tuesday']
df.groupby('Day').size().reindex(cat).plot.bar()
plt.show()
答
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))
为:
感谢ÿ ou虽然我不明白''有序的绝对'''究竟是什么?我无法从您提供的网址中了解。 – DramboHero
对不起,这是不好的链接。需要http://pandas.pydata.org/pandas-docs/stable/categorical。html#sorting-and-order – jezrael
所以在groupby之后,你会从'days'得到名为'index'的第一列,并且它是按字母数字排序的。但是,如果需要像星期几那样进行自定义排序,则需要创建有序类别 - 然后按“list”“cat”中的值顺序进行排序 – jezrael