DataFrame 替换列中的多个键

Posted

技术标签:

【中文标题】DataFrame 替换列中的多个键【英文标题】:DataFrame replace multiple keys in a column 【发布时间】:2022-01-03 10:45:01 【问题描述】:

给定 2 个数据帧:

DF1(意甲):

Col_Name_1
[['A, B']
['B']
['A, C']
['B, C']]

DF2:

Col_Name_X, Col_Name_Y
[['A', 'Paris'] 
['B', 'London']
['C', 'Mexico']]

在 DF1 中,我需要使用对应表的 DF2 替换所有值 A、B、C。 关键点是,在某些行中,有多个值要替换:例如在第一行中的 ['A, B']。

我尝试了 3 种方法: 1-拆分 Col_Name_1 以将每个值放在单独的列中并使用合并函数循环 2-从 DF2 创建字典并在 DF1 上使用替换功能 3- 从 DF2 创建字典并在 DF2 上使用地图功能

我遇到的问题是我的 DataFrame 有 1 000 000 行。 1 & 2 正在消耗太多的内存、CPU 和时间。我无法得到结果。 3 速度很快,但不匹配来自 DF1 的多个值:A、B 返回 NaN

我认为它必须存在一种简单的方法来做到这一点......请问有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

使用字典映射,在df1dict.get 的列中拆分值,如果没有匹配则返回相同的值:

d = df2.set_index('Col_Name_X')['Col_Name_Y'].to_dict()

f = lambda x: ', '.join(d.get(y,y) for y in x.split(', '))
df1['Col_Name_1'] = df1['Col_Name_1'].apply(f)

print (df1)
       Col_Name_1
0   Paris, London
1          London
2   Paris, Mexico
3  London, Mexico

【讨论】:

完美!谢谢:)

以上是关于DataFrame 替换列中的多个键的主要内容,如果未能解决你的问题,请参考以下文章

Pandas DataFrame:根据条件替换列中的所有值

使用 lambda 以字符串开头时替换 DataFrame 列中的值

我需要用一些组替换我的 DataFrame 中的列中的值

在 Pandas Dataframe 列中的嵌套字典中搜索和替换

将 pandas 列中的值替换为缺失键的默认值

如何根据有序列表替换pandas dataframe列中的元素?