我试图对数据框进行分组,然后将一个函数应用于数据框的每一行:
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函数,该怎么办?
更新:
数据集可在此处下载。
| 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 |
感谢@ min2bro,我想我知道了答案。
问题在于df['TIME_M'].dt.date
,这是一个有日期和无效时间的对象2017-01-03 00:00:00
。但是,按此对象分组会返回错误,因为熊猫在解析列时无法正确识别日期对象。
正确的方法是将日期单独作为一列分开,然后按该对象分组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句