繁体   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