繁体   English   中英

两个Pandas数据帧之间的vlookup

[英]vlookup between 2 Pandas dataframes

我有2个pandas Dataframes如下。

DF1:

Security     ISIN
ABC           I1 
DEF           I2
JHK           I3
LMN           I4
OPQ           I5

和DF2:

ISIN      Value
 I2        100
 I3        200
 I5        300

我想最终得到第三个数据帧,如下所示:

DF3:

Security   Value
 DEF       100
 JHK       200
 OPQ       300

你可以使用merge ,默认是内部连接,所以how=inner省略how=inner ,如果两个Dataframes只有一个公共列,你也可以省略参数on='ISIN'

df3 = pd.merge(df1, df2)
#remove column ISIN
df3.drop('ISIN', axis=1, inplace=True)
print (df3)
  Security  Value
0      DEF    100
1      JHK    200
2      OPQ    300

或者从df1Series mapISIN

print (df1.set_index('ISIN')['Security'])
ISIN
I1    ABC
I2    DEF
I3    JHK
I4    LMN
I5    OPQ
Name: Security, dtype: object

#create new df by copy of df2
df3 = df2.copy()
df3['Security'] = df3.ISIN.map(df1.set_index('ISIN')['Security'])
#remove column ISIN
df3.drop('ISIN', axis=1, inplace=True)
#change order of columns
df3 = df3[['Security','Value']]
print (df3)
  Security  Value
0      DEF    100
1      JHK    200
2      OPQ    300

您可以使用pd.mergeISIN上自动执行内部pd.merge 以下代码行可以帮到您:

df3 = pd.merge(df1, df2)[['Security', 'Value']]

这导致df3

  Security  Value
0      DEF    100
1      JHK    200
2      OPQ    300

完全可重现的代码示例如下所示:

import pandas as pd

df1 = pd.DataFrame({
        'Security': ['ABC', 'DEF', 'JHK', 'LMN', 'OPQ'],
        'ISIN' : ['I1', 'I2', 'I3', 'I4', 'I5']
    })
df2 = pd.DataFrame({
        'Value': [100, 200, 300],
        'ISIN' : ['I2', 'I3', 'I5']
    })

df3 = pd.merge(df1, df2)[['Security', 'Value']]
print(df3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM