2016-12-13 258 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)) 

爲: