【问题标题】:Pandas groupby datetime and column then apply generates ValueErrorPandas groupby 日期时间和列然后应用生成 ValueError
【发布时间】:2018-12-06 00:39:20
【问题描述】:

我正在尝试对我的数据框进行分组,然后对数据框的每一行应用一个函数:

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         | 

【问题讨论】:

  • 你能添加一些数据样本吗?
  • @jezrael 我添加了数据的链接。它只包含两行,一个非常简单的数据集。
  • @jezrael 我还附上了数据集的文本版本。
  • 好像是bug :(
  • @JinhuaWang 您正在尝试按 df['TIME_M'].dt.date 分组,即'2017-01-03 00:00:00',它无法分组,这就是错误的原因。试试这个,它会工作 df.groupby(['SYM_ROOT',df['TIME_M']]).apply(group_increment_to_end)

标签: python python-2.7 pandas pandas-groupby


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2019-11-20
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多