Python pandas - 合并数据帧行

时间:2016-12-13 07:47:03

标签: python pandas dataframe

我正在使用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

并将此数据放入数据框中,以便我可以绘制它。

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

2 个答案:

答案 0 :(得分: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天很重要,请将列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()

graph1

如果不想使用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))

有关: