簡體   English   中英

根據條件從另一個 dataframe 值替換列的值 - Python

[英]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 3453Alphabet ,第二個ERROR應該被替換為基於 Ticket 2364AMD

最后,所需的 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.

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