2016-12-13 33 views
2

我使用大熊猫以示数据帧合并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 

和把这些数据放在一个数据框中,这样我就可以绘制它。

任何想法我该怎么做?谢谢!

回答

3

我认为你需要groupby与骨料size

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() 

graph

如果为了OD天是重要转换列Dayordered 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() 

graph1

如果不想使用categorical,另一种解决方案是reindex通过cat

cat = ['sunday','monday','tuesday'] 
df.groupby('Day').size().reindex(cat).plot.bar() 
plt.show() 
+0

感谢ÿ ou虽然我不明白''有序的绝对'''究竟是什么?我无法从您提供的网址中了解。 – DramboHero

+0

对不起,这是不好的链接。需要http://pandas.pydata.org/pandas-docs/stable/categorical。html#sorting-and-order – jezrael

+0

所以在groupby之后,你会从'days'得到名为'index'的第一列,并且它是按字母数字排序的。但是,如果需要像星期几那样进行自定义排序,则需要创建有序类别 - 然后按“list”“cat”中的值顺序进行排序 – jezrael

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)) 

为: