【问题标题】:pandas AttributeError: 'DataFrame' object has no attribute 'dt' when using apply on groupbypandas AttributeError:在 groupby 上使用时,“DataFrame”对象没有属性“dt”
【发布时间】:2019-07-04 21:03:05
【问题描述】:

我有以下df

code    date1        date2
2000    2018-03-21   2018-04-04
2000    2018-03-22   2018-04-05
2000    2018-03-23   2018-04-06

当我尝试时

df_code_grp_by = df.groupby(['code'])

df_code_grp_by.apply(lambda x: x.date2 - x.date1).dt.days.sum(level=0).reset_index(name='date_diff_sum')

我明白了

AttributeError: 'DataFrame' object has no attribute 'dt'

date1date2 都是dtype('<M8[ns]'),我想知道如何解决它。

我正在使用Pandas 0.22.0Python 3.5.2Numpy 1.15.4

【问题讨论】:

    标签: python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    这里更好的是按code 列创建索引并减去Series

    df = df.set_index('code')
    df = (df.date2 - df.date1).dt.days.sum(level=0).reset_index(name='date_diff_sum')
    print (df)
       code  date_diff_sum
    0  2000             42
    

    代码问题是apply返回行(可能是bug):

    df_code_grp_by = df.groupby(['code'])
    
    df = df_code_grp_by.apply(lambda x: x.date2 - x.date1)
    print (df)
                         0                 1                 2
    code                                                      
    2000  1209600000000000  1209600000000000  1209600000000000
    

    可能的解决方案是使用np.sum:

    df = (df_code_grp_by.apply(lambda x: np.sum(x.date2 - x.date1))
                        .dt.days
                        .reset_index(name='date_diff_sum'))
    print (df)
       code  date_diff_sum
    0  2000             42
    

    【讨论】:

    • 谢谢你的回复,你能告诉我我的代码有什么问题
    • @daiyue - 调查中。
    猜你喜欢
    • 2017-02-12
    • 2014-01-10
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2013-10-23
    • 2020-04-14
    相关资源
    最近更新 更多