1
我有一个csv文件日期为列标题和二进制矩阵1,0或np.nan
。熊猫TimeGrouper列
我想取每个索引的均值,按月分组。我遇到了一个问题,因为我的列不是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()
谢谢我困惑的轴标签! 'freq ='MS''与'freq ='M''有什么区别?我无法在文档中找到它?你的第二种方法似乎将日期转换为索引值(将两行平均到一起,它是否也需要'groupby'? – user2242044
'MS'用于本月初(请参阅http://stackoverflow.com/a/17001474/ 2285236)。我做到了,所以它匹配你的输出,用M代码给2016-01-31和2016-02-29。你能用'pd .__ version__'来检查你的熊猫版吗?这个显示问题看起来像一个bug。 – ayhan
感谢您的澄清!我使用的是版本0.17.0。您的第一种方法确实解决了我的问题,但我对第二种方法感到好奇,为什么它对我来说很不同 – user2242044