![](/img/trans.png)
[英]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.