我试图对数据框进行分组,然后将一个函数应用于数据框的每一行:
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 |
答案 0 :(得分:2)
感谢@ min2bro,我想我知道答案了。
问题出在df['TIME_M'].dt.date
上,它是一个具有日期和无效时间2017-01-03 00:00:00
的对象。但是,按此对象分组会返回错误,因为熊猫在解析列时无法正确识别日期对象。
正确的方法是将日期单独作为一列分开,然后按该对象分组。