2016-12-13 14 views
2

私はデータフレームを表示するためにパンダを使用していますし、私の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

私はあなたが集計size

print (df.groupby('Day').size()) 
Day 
monday  1 
sunday  3 
tuesday 2 
dtype: int64 

、その後、必要なプロットbar場合にgroupbyが必要だと思う:注文OD日場合

import matplotlib.pyplot as plt 

df.groupby('Day').size().plot.bar() 
plt.show() 

graph

ordered categoricalに重要な変換列Day次のとおりです。

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を使いたい場合は、別の解決策はcatによってreindexです:

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

をyに感謝私は理解していませんでしたが、それは正確には何ですか?私はあなたが与えたURLから理解できませんでした。 – 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 

これらは、最小から最小のグループに分けられており、迷子にならないように支援します。 あなたが与えられた順序でそれらをしたい場合は、元の順序にREINDEX:

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

関連する問題