我有以下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'
date1
和date2
都是dtype('<M8[ns]')
,我想知道如何解决它。
我正在使用Pandas 0.22.0
,Python 3.5.2
和Numpy 1.15.4
。
答案 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