绘制分类数据随时间变化计数

时间:2015-01-09 13:59:56

标签: matplotlib pandas

我有一个DataFrame(df),其中包含一个包含分类数据(ETH)的列,带有DateTimeIndex,我想在计数上绘制类别时间(它们按天标记,我最好按年份绘制它们。)

df = pd.DataFrame({
    'County': {
        0: 'Bexar',
        3: 'Nueces',
        4: 'Kerr',
        9: 'Harris',
        13: 'Hidalgo'},
    'Date': {
        0: '2012-10-28 00:00:00',
        3: '2012-04-16 00:00:00',
        4: '2013-09-04 00:00:00',
        9: '2013-01-22 00:00:00',
        13: '2013-09-26 00:00:00'},
    'ETH': {
        0: 'Red',
        3: 'Green',
        4: 'Red',
        9: 'Green',
        13: 'Red'}
})
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True, infer_datetime_format = True)
df['ETH'] = df['ETH'].astype('category')
df = df.set_index('Date')

然而,groupby或pivot的组合没有像我想要的那样远程提供任何东西,尽管我知道这应该相当简单。我似乎无法找到一种标准方法来做到这一点 - 帮助?

1 个答案:

答案 0 :(得分:1)

下面的代码将首先按“ETH”类别进行分组,然后遍历每个组。

对于每个组,它然后使用lambda函数按DataTimeIndex年份进行分组,并返回该年份的行数。然后绘制这些计数。

当绘制年份时,它将其绘制为数字(不是日期),这就是为什么x轴看起来有点奇怪,你可以将它转换回日期(比如每年的1月1日)来制作它更漂亮。我使用plt.xlimplt.ylim稍微调整了限制,以便更容易查看。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
    'County': {
        0: 'Bexar',
        3: 'Nueces',
        4: 'Kerr',
        9: 'Harris',
        13: 'Hidalgo'},
    'Date': {
        0: '2012-10-28 00:00:00',
        3: '2012-04-16 00:00:00',
        4: '2013-09-04 00:00:00',
        9: '2013-01-22 00:00:00',
        13: '2013-09-26 00:00:00'},
    'ETH': {
        0: 'Red',
        3: 'Green',
        4: 'Red',
        9: 'Green',
        13: 'Red'}
})
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True, infer_datetime_format = True)
df['ETH'] = df['ETH'].astype('category')
df = df.set_index('Date')

grouped = df.groupby('ETH')

for key, group in grouped:
    data = group.groupby(lambda x: x.year).count()
    data['ETH'].plot(label=key)

plt.xlim(2011, 2014)
plt.ylim(0,3)

plt.legend()

plt.show()

enter image description here

是的,我发现颜色与ETH变量不匹配,因此“绿色”绘制为蓝色,“红色”绘制为绿色:P