[英]Python dataframe = Replace values in column string with values from another dataframe
[英]Replace values of a column from another dataframe values based on a condition - Python
我的問題如下:
我有第一個 dataframe (df1):
客戶 | 票 | 地區 | 輪廓 |
---|---|---|---|
BCA | 1234 | 我們 | 香農 |
錯誤 | 3453 | 歐洲、中東和非洲 | 勞拉 |
RZ | 7988 | 歐洲 | 米奇 |
錯誤 | 2364 | 我們 | 詹姆士 |
色氨酸 | 3429 | MX | 羅傑 |
這是我的第二個 datafrane (df2)
客戶 | 票 |
---|---|
HHA | 3534 |
字母 | 3453 |
生命值 | 2355 |
AMD | 2364 |
我想使用 df2 'Client' 列的值替換 df1 的 'Client' 列上的 'ERROR' 值,但問題是我遇到了基於 'Ticket' 值的問題:在這個例子中,第一個ERROR應該被替換為基於 Ticket 3453的Alphabet ,第二個ERROR應該被替換為基於 Ticket 2364的AMD 。
最后,所需的 output 應該是這樣的:
客戶 | 票 | 地區 | 輪廓 |
---|---|---|---|
BCA | 1234 | 我們 | 香農 |
字母 | 3453 | 歐洲、中東和非洲 | 勞拉 |
RZ | 7988 | 歐洲 | 米奇 |
AMD | 2364 | 我們 | 詹姆士 |
色氨酸 | 3429 | MX | 羅傑 |
data = df1.merge(df2, on='Ticket', how='left')
data.loc[data.Client_x.eq("ERROR"), "Client_x"] = data.Client_y
data.drop(columns=['Client_y']).rename(columns={'Client_x': 'Client'})
您可以使用map
進行分配
df1.loc[df1['Client'].eq('ERROR'),'Client'] = df1['Ticket'].map(df2.set_index('Ticket')['Client'])
df1
Out[192]:
Client Ticket Region Profile
0 BCA 1234 US Shanon
1 Alphabet 3453 EMEA Laura
2 RZ 7988 EUROPE Mitch
3 AMD 2364 US James
4 Trp 3429 MX Rog
這里有一個方法:
df1 = df1.set_index('Ticket')
df1.loc[df1.Client=='ERROR','Client'] = df2.set_index('Ticket').Client
df1.Client = df1.Client.fillna('ERROR')
df1 = df1.reset_index()[['Client', 'Ticket'] + [col for col in df1.columns if col != 'Client']]
輸入:
df1
Client Ticket Region Profile
0 BCA 1234 US Shanon
1 ERROR 3453 EMEA Laura
2 RZ 7988 EUROPE Mitch
3 ERROR 2364 US James
4 Trp 3429 MX Roger
5 ERROR 9999 US James
df2
Client Ticket
0 HHA 3534
1 Alphabet 3453
2 HP 2355
3 AMD 2364
Output:
Client Ticket Region Profile
0 BCA 1234 US Shanon
1 Alphabet 3453 EMEA Laura
2 RZ 7988 EUROPE Mitch
3 AMD 2364 US James
4 Trp 3429 MX Roger
5 ERROR 9999 US James
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.