pandas AttributeError: 在对groupby应用apply函数时,'DataFrame'对象没有'dt'属性。

4

我有以下的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个回答

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返回行(可能是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
@daiyue - 正在调查。 - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接