Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在两个数据帧之间进行vlookup,以创建第三个数据帧_Python_Python 3.x_Pandas - Fatal编程技术网

Python 在两个数据帧之间进行vlookup,以创建第三个数据帧

Python 在两个数据帧之间进行vlookup,以创建第三个数据帧,python,python-3.x,pandas,Python,Python 3.x,Pandas,我想使用与excel的vlookup等效的新数据帧。我有两个数据帧,正在尝试对df2.Column A和B进行v-lookupdf1.Column A值,并获取值A 旁边的单元格是df1.A列值与df2.A列和B列相对,并获得值B 数据看起来像- 对于数据帧1和2,数据分别位于A列和B列中 Current ouput Data frame 1

我想使用与excel的vlookup等效的新数据帧。我有两个数据帧,正在尝试对
df2.Column A和B进行v-lookup
df1.Column A值
,并获取
值A

旁边的单元格是
df1.A列
值与
df2.A列和B列
相对,并获得
值B

数据看起来像-

对于数据帧1和2,数据分别位于A列和B列中

Current ouput                                                                  
    Data frame 1              Dataframe2     

      AC1     AC2               AC10                 AC20                                
    Bus        5              car                      1                                    
    car        3              helicopter               7                                  
    Walking    2              running                  5                                  
期望/预期产出

           Dataframe [Neu]    

NaNa                       NaNa    
Car                           1     
NaNa                       NaNa
我试过:

dfz = df1.insert(2, '2A2', df1['AC1'].map(df2.set_index('AC1')['2A2']))
print (dfz)

result = left.join(right, on=['AC2', 'AC1], how='inner')
#left.join(right, lsuffix='_l', rsuffix='_r')

#df1.join(df1.set_index('AC2')['AC1'], on='AC2')
我在以下方面取得了一些成功:

df8 = df1['AC3'] = df1.AC1.map(df2.AC10)
print (df8)


df8 = df1['AC4'] = df1.AC1.map(df2.AC20)
print (df8)
确切的输出为NaN,因此不正确

例如:

df1 = pd.read_excel('C:/Users/Desktop/zav.xlsx')

df2 = pd.read_excel('C:/Users/Desktop/zav2.xlsx')

#df3 = pd.merge(df, df2)
df3 = df1.join(df2)
print (df3)


todays_date = datetime.datetime.now().date()
index = pd.date_range(todays_date-datetime.timedelta(10), periods=10, freq='D')

df5 = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),
                 columns=['a', 'b', 'c', 'd', 'e'])
print(df5)


df8 = df1['AC3'] = df1.AC1.map(df2.AC10)
print (df8)


df8 = df1['AC3'] = df1.AC1.map(df2.AC20)
print (df8)

使用
map
,您可以检查以下代码:

import pandas as pd    

df1 = pd.DataFrame([["Bus",5],["car",3],["Walking",2]],columns=["AC1","AC2"])

df2 = pd.DataFrame([["car",1],["helicopter",7],["running", 5]],columns=["AC10","AC20"])

df2 = df2.groupby("AC10").first()

df3= df1.join(df2,on="AC1",how="left").drop("AC2",axis=1)
它将输出以下内容:

       AC1  AC20
0      Bus   NaN
1      car   1.0
2  Walking   NaN

你的预期输出是什么?@andrew_reece我在问题中包括了我的预期输出,但你不得不多次向右滚动。我会更新的。谢谢您是否尝试将
合并为
how='left'
?还有,这是汽车和汽车的正常区别吗?@angelwally,这是个打字错误。我尝试了dfza=df1['AC3']=df1.AC1.map(df2.AC10)打印(dfza)。同样的问题似乎也存在,我以前从未使用过map,但看看文档,我想你应该为函数的参数设置索引。在你的例子中,如果你想把它合并到df1.AC1上,df2应该有AC10作为索引。有没有办法调整-df1=pd.Series([“AC2”],index=[“AC1”])df2=pd.Series([“AC20”],index=[“AC10”])我有大约100个数据单元,这样做可能需要一段时间。e、 系列([usecols=1],index=[cols=2])我不确定您在这里想做什么。你能用vlookup把你的excel上传到某个地方看看你想达到什么目的吗?当然。根据您的文件,我上传了一个与我所追求的内容相当的Excel,我将首先执行
df2=df2.groupby(“col1”).first()
,以获取df2的第一个条目。然后,
df3=df1.join(df2,on=“col1”,how=“left”)
。如果不需要,可以删除原始的第二列。这就是你要找的吗?差不多行了。打印(df2.columns.tolist())dfzaa=df1.groupby(“AC1”).first()df3=df2.join(df1,on=“AC20”,how=“left”)打印(df3)。嗯。。。