熊猫拆开不起作用

时间:2014-01-25 15:35:42

标签: python pandas

最初,我有一个DF,其中有一列操作使用DatetimeIndex索引:

In [371]: dates
2013-12-29 19:21:00    action1
2013-12-29 19:21:01    action2
2013-12-29 19:21:11    action1
2013-12-29 19:21:13    action2
                           ...
In [372]: dates.index
    Out[372]: 
    <class 'pandas.tseries.index.DatetimeIndex'>
    [2013-12-29 19:02:27, ..., 2014-01-13 16:30:31]
    Length: 108957, Freq: None, Timezone: None

我想绘制某种类型的行动次数与日期

因此,我使用agg

按日期对操作进行了分组
grouped = dates.groupby([dates.index.to_period(freq = 'D'), 'actiontype']).agg(len)

这给了我多索引系列:

...
2014-01-13  action1       435
            action2       2067
..
2014-01-14  action1       455
            action2       1007
...

这似乎正是我所需要的。

但是当试图unstack系列摆脱MultiIndex并绘制我的数据时,却得到了错误:

In [379]: grouped.unstack()

ValueError: freq not specified and cannot be inferred from first element

我的错误是什么?谢谢。

1 个答案:

答案 0 :(得分:1)

如果您需要使用.unstack()并且它不能与该多索引一起使用,那么从非索引数据开始

index                 mydate     action
    0    2000-12-29 00:10:00    action1
    1    2000-12-29 00:20:00    action2
    2    2000-12-29 00:30:00    action2
    3    2000-12-29 00:40:00    action1
    4    2000-12-29 00:50:00    action1
    5    2000-12-31 00:10:00    action1
    6    2000-12-31 00:20:00    action2
    7    2000-12-31 00:30:00    action2
你可以做点什么

df['day'] = df['mydate'].apply(lambda x: x.split()[0])
counts = df.groupby(['day', 'action']).agg(len)

基本上你忘了日期时间是一个日期时间,你只需将它保存为一个字符串,你只保留日期,丢弃时间。现在大熊猫在时间维度上会很愚蠢,但counts.unstack()会给你

             mydate         
action      action1  action2
day                         
2000-12-29        3        2
2000-12-31        1        2