我有表:
| 用戶身份 | 事件型別 | 日期 |
|---|---|---|
| 001 | 安裝 | 01-01-2021 |
| 001 | 登錄 | 02-01-2021 |
| 001 | 登錄 | 04-01-2021 |
我需要為按 user_id 分組的所有行創建一個新列“安裝”,該列將填充“日期”列中的日期,而日期必須取自事件 event_type='install'。
結果表應如下所示:
| 用戶身份 | 事件型別 | 日期 | 安裝 |
|---|---|---|---|
| 001 | 安裝 | 01-01-2021 | 01-01-2021 |
| 001 | 登錄 | 02-01-2021 | 01-01-2021 |
| 001 | 登錄 | 04-01-2021 | 01-01-2021 |
uj5u.com熱心網友回復:
您可以使用groupby.first來獲取每個組的第一個安裝,然后map按 user_id 映射它:
# get first install value (if you have duplicates you would need to get the min)
d = df[df['event_type'].eq('install')].groupby(df['user_id'])['date'].first()
# map the values per user_id
df['install'] = df['user_id'].map(d)
輸出:
user_id event_type date install
0 1 install 01-01-2021 01-01-2021
1 1 login 02-01-2021 01-01-2021
2 1 login 04-01-2021 01-01-2021
作為一個班輪:
df['install'] = df['user_id'].map(df[df['event_type'].eq('install')]
.groupby(df['user_id'])['date'].first())
uj5u.com熱心網友回復:
使用Series.mapbySeries過濾install不重復的 by user_id:
df['install'] = (df['user_id'].map(df[df['event_type'].eq('install')]
.drop_duplicates('user_id')
.set_index('user_id')['date']))
print (df)
user_id event_type date install
0 1 install 01-01-2021 01-01-2021
1 1 login 02-01-2021 01-01-2021
2 1 login 04-01-2021 01-01-2021
uj5u.com熱心網友回復:
是否存在一個 id 安裝多次的情況?然后使用groupby ffill
(df
.assign(install=df['date'].where(df['event_type'] == 'install'))
.assign(install=lambda x: x.groupby('user_id')['install'].ffill())
輸出:
user_id event_type date install
0 1 install 01-01-2021 01-01-2021
1 1 login 02-01-2021 01-01-2021
2 1 login 04-01-2021 01-01-2021
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529399.html
