我正在寻找一种有效的方法来对两个 pandas.DataFrames 执行以下连接:
第一个包含在 A
列中的字符串如下:
A ....
Spam|One
Spam|Two
Ham
Eggs
第二个是引用表,以字符串键为索引,有文字说明:
index description
Spam "..."
Ham "..."
Eggs "...."
BakedBeans "...."
索引中的每个键都可以是A
中字符串的前缀。现在我想将描述列连接到 A 列,其中 A 中的值与前缀匹配。我有一种感觉,它有一个高效的 pandas one-liner...
我们可以假设 A
中的所有值都具有“prefix|suffix”或“prefix”格式。也许这可以加快速度。
最佳答案
使用Series.str.split
选择列表的第一个值和 Series.map
按系列
:
print (df1)
A
0 Spam|One
1 Spam|Two
2 Ham
3 Eggs
print (df2)
description
Spam aaa
Ham sd
Eggs rty
print (df2.index)
Index(['Spam', 'Ham', 'Eggs'], dtype='object')
df1['description'] = df1['A'].str.split('|').str[0].map(df2['description'])
print (df1)
A description
0 Spam|One aaa
1 Spam|Two aaa
2 Ham sd
3 Eggs rty
更通用的解决方案应该是Series.str.extract
, ^
用于提取起始字符串,join
由 |
用于正则表达式 OR
由 df2.index
:
pat = '(' + '|'.join('^' + df2.index) + ')'
df1['new'] = df1['A'].str.extract(pat,expand=False).map(df2['description'])
关于python - 通过字符串前缀加入 Pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55207373/