gpt4 book ai didi

python - 搜索和更新 Pandas 数据框中每一行值的最快方法

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:06 25 4
gpt4 key购买 nike

我有一个数据框,其中包含交易 ID、客户名称和花费的金额,如下所示:

id |  name      |    amount 
1 | Jennifer | 598
2 | Jennifer | 765
3 | Matt | 134
4 | George | 390
5 | Jennifer | 554
6 | Matt | 75
7 | Matt | 830
8 | Matt | 20
9 | Bob | 786
10 | Bob | 280
11 | Sam | 236
12 | Sam | 226
13 | Bob | 720
14 | Bob | 431
15 | Jennifer | 802
16 | Ann | 668
17 | Sam | 376
18 | Jennifer | 891
19 | Ann | 569
20 | Jennifer | 452

现在我想创建一个名为“amount1”的新列,这是每个客户上次购买时花费的金额,结果将如下所示:

id  | name     |   amount   |     amount1
1 | Jennifer | 598 |
2 | Jennifer | 765 | 598
3 | Matt | 134 |
4 | George | 390 |
5 | Jennifer | 554 | 765
6 | Matt | 75 | 134
7 | Matt | 830 | 75
8 | Matt | 20 | 830
9 | Bob | 786 |
10 | Bob | 280 | 786
11 | Sam | 236 |
12 | Sam | 226 | 236
13 | Bob | 720 | 786
14 | Bob | 431 | 720
15 | Jennifer | 802 | 554
16 | Ann | 668 |
17 | Sam | 376 | 226
18 | Jennifer | 891 | 802
19 | Ann | 569 | 668
20 | Jennifer | 452 | 891

它只是迭代每一行并搜索所有以前的购买记录,并用最近的购买记录更新“amount1”。

我试过下面的代码,但我有大约 20 万行数据,运行需要几个小时。执行此任务的最有效方法是什么?

df['amount1'] = np.nan 

for index, row in df.iterrows():

purchase_id = row['id']
customer_name = row['name']
amt = df.query('id<@purchase_id and name==@customer')['amount'].values

if len(amt)>0:
df.loc[index,'amount1'] = amt[-1]

最佳答案

使用DataFrameGroupBy.shift :

df['amount1'] = df.groupby(['name'])['amount'].shift()
print (df)
id name amount amount1
0 1 Jennifer 598 NaN
1 2 Jennifer 765 598.0
2 3 Matt 134 NaN
3 4 George 390 NaN
4 5 Jennifer 554 765.0
5 6 Matt 75 134.0
6 7 Matt 830 75.0
7 8 Matt 20 830.0
8 9 Bob 786 NaN
9 10 Bob 280 786.0
10 11 Sam 236 NaN
11 12 Sam 226 236.0
12 13 Bob 720 280.0
13 14 Bob 431 720.0
14 15 Jennifer 802 554.0
15 16 Ann 668 NaN
16 17 Sam 376 226.0
17 18 Jennifer 891 802.0
18 19 Ann 569 668.0
19 20 Jennifer 452 891.0

如果只需要移动正的 amount 值使用:

s = df['amount'].where(df['amount'] > 0)
df['amount1'] = s.groupby(df['name']).shift()

关于python - 搜索和更新 Pandas 数据框中每一行值的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57505106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com