pandas AttributeError: объект «DataFrame» не имеет атрибута «dt» при использовании «применить к групповому» - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть следующие 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.

1 Ответ

0 голосов
/ 11 февраля 2019

Лучше создать индекс по 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...