Как агрегировать с лямбда-функцией Python для столбца A по идентификатору столбца? - PullRequest
0 голосов
/ 01 октября 2019

Я агрегирую по многим столбцам в моем фрейме данных. Теперь я хочу создать df_8, в котором я хочу сказать, что для всех уникальных идентификаторов просто вставьте значение столбца os. Когда я запускаю первую часть агрегации, я не получаю ошибку. Но когда я запускаю следующий шаг объединения всех агрегированных фреймов данных, это не работает. Единственное новое изменение в моем скрипте - это добавление df_8 (агрегация ОС). Почему?

AGGREGATION
    df_test=df[['id','date','purchase','days1','days2','inactivity','visitnumber','total_duration','os']].copy()

    df_1=df_test.groupby(['id'])["date"].apply(lambda z : ((z.max()-z.min()) + '1D')).astype('timedelta64[D]').reset_index()
    df_2=df_test.groupby(['id'])["purchase"].apply(lambda x : x.astype(int).sum()).reset_index()
    df_3=df_test[df_test['days1'].gt(0)].groupby('id')['date'].count().astype(int)
    df_4=df_test.groupby(['id'])["days2"].apply(lambda t : t.astype(int).count()).reset_index()
    df_5=df_test.groupby(['id'])["total_duration"].apply(lambda f : (today-f.min())+'1D').astype('timedelta64[D]').reset_index()
    df_6=df_test[df_test['days1'].gt(0)].groupby(['id'])['inactivity'].apply(lambda j: (today - j.max())).astype('timedelta64[D]')
    df_7=df_test[df_test['purchase'].gt(0)].groupby(['id'])['visitnumber'].apply(lambda i : i.astype(int).count()).reset_index()
    **df_8=df_test.groupby(['id'])['os'].apply(lambda h: h).reset_index()**

MERGING OF ALL DFs
df_a=pd.merge(df_1, df_2, on='id', how='left').fillna(0)
df_b=pd.merge(df_a, df_3, on='id', how='left').fillna(0)
df_c=pd.merge(df_b, df_4, on='id', how='left').fillna(0)
df_d=pd.merge(df_c, df_5, on='id', how='left').fillna(0)
df_e=pd.merge(df_d, df_6, on='id', how='left').fillna(0)
df_f=pd.merge(df_e, df_7, on='id', how='left').fillna(0)
df  =pd.merge(df_f, df_8, on='id', how='left').fillna(0)

df.head()

Error: KeyError: 'id'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...