使用 join 在 Pandas 中进行 vlookup
- 2025-03-21 09:07:00
- admin 原创
- 58
问题描述:
我有以下两个数据框
Example1
sku loc flag
122 61 True
123 61 True
113 62 True
122 62 True
123 62 False
122 63 False
301 63 True
Example2
sku dept
113 a
122 b
123 b
301 c
我想要使用 Pandas(或任何最好的 Python 运算符)执行合并或连接操作来生成下面的数据框。
Example3
sku loc flag dept
122 61 True b
123 61 True b
113 62 True a
122 62 True b
123 62 False b
122 63 False b
301 63 True c
Both
df_Example1.join(df_Example2,lsuffix='_ProdHier')
df_Example1.join(df_Example2,how='outer',lsuffix='_ProdHier')
不起作用。我做错了什么?
解决方案 1:
执行left
合并,这将使用sku
列作为要连接的列:
In [26]:
df.merge(df1, on='sku', how='left')
Out[26]:
sku loc flag dept
0 122 61 True b
1 122 62 True b
2 122 63 False b
3 123 61 True b
4 123 62 False b
5 113 62 True a
6 301 63 True c
如果sku
实际上是您的索引,则执行以下操作:
In [28]:
df.merge(df1, left_index=True, right_index=True, how='left')
Out[28]:
loc flag dept
sku
113 62 True a
122 61 True b
122 62 True b
122 63 False b
123 61 True b
123 62 False b
301 63 True c
另一种方法是使用map
,如果你将其设置sku
为第二个 df 上的索引,那么实际上它就变成了一个系列,那么代码简化如下:
In [19]:
df['dept']=df.sku.map(df1.dept)
df
Out[19]:
sku loc flag dept
0 122 61 True b
1 123 61 True b
2 113 62 True a
3 122 62 True b
4 123 62 False b
5 122 63 False b
6 301 63 True c
解决方案 2:
更通用的应用程序将使用apply
如下lambda
方法:
dict1 = {113:'a',
122:'b',
123:'b',
301:'c'}
df = pd.DataFrame([['1', 113],
['2', 113],
['3', 301],
['4', 122],
['5', 113]], columns=['num', 'num_letter'])
添加为新的数据框列
**df['letter'] = df['num_letter'].apply(lambda x: dict1[x])**
num num_letter letter
0 1 113 a
1 2 113 a
2 3 301 c
3 4 122 b
4 5 113 a
或者替换现有的('num_letter')列
**df['num_letter'] = df['num_letter'].apply(lambda x: dict1[x])**
num num_letter
0 1 a
1 2 a
2 3 c
3 4 b
4 5 a
解决方案 3:
VBA 中的 VLookup 就像 pandas.dataframe.merge
过去我总是寻找很多 VBA 程序,现在 python dataframe 为我节省了大量工作,好处是我不需要编写 vlookup 方法。
pandas.DataFrame.merge
>>> A >>> B
lkey value rkey value
0 foo 1 0 foo 5
1 bar 2 1 bar 6
2 baz 3 2 qux 7
3 foo 4 3 bar 8
>>> A.merge(B, left_on='lkey', right_on='rkey', how='outer')
lkey value_x rkey value_y
0 foo 1 foo 5
1 foo 4 foo 5
2 bar 2 bar 6
3 bar 2 bar 8
4 baz 3 NaN NaN
5 NaN NaN qux 7
您还可以尝试以下操作进行左合并。
import pandas as pd
pd.merge(left, right, left_on = 'key', right_on = 'key', how='left')
outer或left就像 SQL 一样,python 的内置类 DataFrame 具有接受许多参数的方法 merge,非常详细且方便。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD