Pandas TimeGrouper by column

时间:2016-12-06 17:01:56

标签: python python-2.7 pandas

我有一个csv文件,其中日期为列标题,二进制为矩阵,为1,0或np.nan

我想取每个索引的平均值,按月分组。我遇到了一个问题,因为我的列不是datetimeindex,我尝试使用pd.to_datetime()转换为没有运气。

binary.csv:

2016-01-01 00:00:00,2016-01-02 00:00:00,2016-02-01 00:00:00,2016-02-02 00:00:00
1,,0,1
0,1,,1

我的代码:

import pandas as pd
import numpy as np

df = pd.read_csv('binary.csv')
df.columns = pd.to_datetime(df.columns, format='%Y-%m-%d %H:%M:%S')
df = df.groupby(pd.TimeGrouper(freq='M'), axis=0)
print df

错误:

TypeError: axis must be a DatetimeIndex, but got an instance of 'Int64Index'

期望的输出:

   2016-01-01 00:00:00  2016-02-01 00:00:00
0                  1.0                  0.5
1                  0.5                  1.0

更新了问题:

基于最佳答案:

如果我想每个月获得一个单一价值,那么有更有效的方法吗?

pd.DataFrame(data=df.resample('MS', axis=1).mean().mean()).transpose()

1 个答案:

答案 0 :(得分:2)

默认情况下,pd.TimeGrouper对索引(axis = 0)起作用,因此您需要告诉它应该对列进行分组:

df.groupby(pd.TimeGrouper(freq='MS', axis=1), axis=1).mean()
Out: 
   2016-01-01  2016-02-01
0         1.0         0.5
1         0.5         1.0

您也可以直接使用重新采样:

df.resample('MS', axis=1).mean()
Out: 
   2016-01-01  2016-02-01
0         1.0         0.5
1         0.5         1.0