Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 从多个数据帧中查找并返回相应的值_Python_Pandas_Dataframe - Fatal编程技术网

Python 从多个数据帧中查找并返回相应的值

Python 从多个数据帧中查找并返回相应的值,python,pandas,dataframe,Python,Pandas,Dataframe,一个名称列表,我想检索不同数据帧中的每个对应信息,以形成一个新的数据帧 我将列表转换为1列数据帧,然后在不同的数据帧中查找其对应的值 这个想法被形象化为: 我试过: import pandas as pd data = {'Name': ["David","Mike","Lucy"]} data_h = {'Name': ["David","Mike","Peter",

一个名称列表,我想检索不同数据帧中的每个对应信息,以形成一个新的数据帧

我将列表转换为1列数据帧,然后在不同的数据帧中查找其对应的值

这个想法被形象化为:

我试过:

import pandas as pd

data = {'Name': ["David","Mike","Lucy"]}

data_h = {'Name': ["David","Mike","Peter", "Lucy"],
    'Hobby': ['Music','Sports','Cooking','Reading'],
    'Member': ['Yes','Yes','Yes','No']}

data_s = {'Name': ["David","Lancy", "Mike","Lucy"],
    'Speed': [56, 42, 35, 66],
    'Location': ['East','East','West','West']}

df = pd.DataFrame(data)
df_hobby = pd.DataFrame(data_h)
df_speed = pd.DataFrame(data_s)

df['Hobby'] = df.lookup(df['Name'], df_hobby['Hobby'])

print (df)
但它返回的错误消息如下:

ValueError: Row labels must have same size as column labels
我也尝试过:

df = pd.merge(df, df_hobby, on='Name')
它可以工作,但它包含不必要的列

smart是一种高效的方法,尤其是当要查找的数据帧数量很多时


谢谢。

仅筛选用于合并的列和用于附加的列,如:

df = (pd.merge(df, df_hobby[['Name','Hobby']], on='Name')
        .merge(df_speed[['Name','Location']], on='Name'))
 
print(df)
    Name    Hobby Location
0  David    Music     East
1   Mike   Sports     West
2   Lucy  Reading     West
如果要使用列表,请使用具有筛选列的解决方案:

dfList = [df,  
          df_hobby[['Name','Hobby']],
          df_speed[['Name','Location']]]

from functools import reduce
df = reduce(lambda df1,df2: pd.merge(df1,df2,on='Name'), dfList)
print (df)
    Name    Hobby Location
0  David    Music     East
1   Mike   Sports     West
2   Lucy  Reading     West

合并时,您只能包含必要的列:
pd.merge(df,df_-hobby[['Name','hobby']],on='Name')
,也可以参考链接副本,在这里您可以创建
dfs=[df,df_-hobby['Name','hobby']],df_-speed[[Name','speed']].
更正上述注释:
dfs=[df,df_-hobby['Name','hobby'],df_-speed][['Name','Location']]
then
reduce(lambda x,y:pd.merge(x,y,on='Name'),dfs)
@anky-hmmm,我认为应该重新打开它。@jezrael它与dupe-link相同,只是我们正在考虑数据帧的子集。如果您愿意,可以重新打开。但是,我不同意,因为重复链接有很多建议的和写得很好的答案。请注意,这是一个写得很好的问题though@anky-确实是我的奥皮尼谢谢你,先生!选项#1简单的岩石永远是国王。:)祝你和你的家人圣诞快乐,新年快乐!@MarkK-也祝你,也祝你安全健康;)谢谢。