簡體   English   中英

在組內按日期將最新列值分配給 pandas 中的其他行

[英]Within group assign latest column value by date to other rows in pandas

我有一個 dataframe 看起來像這樣

pd.DataFrame({'a':['cust1', 'cust1', 'cust1',  'cust2', 'cust2', 'cust3', 'cust3', 'cust3'],
                   'date':[date(2019, 1, 20), date(2019, 6, 15), date(2020, 6, 12), date(2017, 12, 15), date(2018, 12, 10), date(2017, 1, 5), date(2018, 1, 15), date(2019, 2, 20)],
                   'ID': ['AA', 'AA', 'bb', 'CC', 'd1', 'GG', 'GG', 'GG'],
                   'c':[9, 9, 8, 4, 8, 3, 6, 4]})

       a        date  ID  c
0  cust1  2019-01-20  AA  9
1  cust1  2019-06-15  AA  9
2  cust1  2020-06-12  bb  8
3  cust2  2017-12-15  CC  4
4  cust2  2018-12-10  d1  8
5  cust3  2017-01-05  GG  3
6  cust3  2018-01-15  GG  6
7  cust3  2019-02-20  GG  4

我想將“ID”列的最新值(按日期)分配給“a”組中的所有行。

我生成的 dataframe 應該如下所示:

       a        date  c  ID
0  cust1  2019-01-20  9  AA
1  cust1  2019-06-15  9  AA
2  cust1  2020-06-12  8  AA
3  cust2  2017-12-15  4  CC
4  cust2  2018-12-10  8  CC
5  cust3  2017-01-05  3  GG
6  cust3  2018-01-15  6  GG
7  cust3  2019-02-20  4  GG

我可以做這樣的事情來實現這一點,但我想知道是否有簡單的 1 行代碼。

new_id = df.sort_values('date').drop_duplicates('a')
df = df.drop(columns='ID')
df_new = df.merge(new_id[['a', 'ID']], how='left', on='a')

你可以做transform

df = df.sort_values('date')
df['new'] = df.groupby('a').ID.transform('last')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM