pandas AttributeError:在groupby上使用apply时,“ DataFrame”对象没有属性“ dt”

时间:2019-02-11 11:15:59

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

我有以下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

1 个答案:

答案 0 :(得分:2)

更好的方法是在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返回行(可能是错误):

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