熊猫groupby日期时间和列然后应用生成ValueError

时间:2018-06-27 07:50:01

标签: python python-2.7 pandas pandas-groupby

我试图对数据框进行分组,然后将一个函数应用于数据框的每一行:

df=pd.read_csv('stack.csv')
df['TIME_M']=pd.to_datetime(df['TIME_M'],format='%Y%m%d %H:%M:%S.%f')
df.groupby(['SYM_ROOT',df['TIME_M'].dt.date]).apply(group_increment_to_end)

def group_increment_to_end(x):
    return x.iloc[0:1]

SYM_ROOT是类别变量,而TIME_M是日期时间变量。

但是,我不断收到以下错误:

ValueError: Key 2017-01-03 00:00:00 not in level Index([2017-01-03], dtype='object', name=u'TIME_M')

您知道问题的原因是什么?是否因为不能将iloc应用于具有多个索引的函数?如果我想遍历行并使用group_increment_to_end函数添加行怎么办,如果我不能使用iloc函数怎么办?

更新:

可以here下载数据集。

| SYM_ROOT | TIME_M                     | BEST_BID | BEST_ASK | increment | genjud_incre | 
|----------|----------------------------|----------|----------|-----------|--------------| 
| A        | 2017-01-03 09:30:00.004712 | 45.91    | 46.12    | 0         | 4680         | 
| AA       | 2017-01-03 09:30:00.004014 | 28.55    | 28.57    | 0         | 4680         | 

1 个答案:

答案 0 :(得分:2)

感谢@ min2bro,我想我知道答案了。

问题出在df['TIME_M'].dt.date上,它是一个具有日期和无效时间2017-01-03 00:00:00的对象。但是,按此对象分组会返回错误,因为熊猫在解析列时无法正确识别日期对象。

正确的方法是将日期单独作为一列分开,然后按该对象分组。