Python 从多个数据帧中查找并返回相应的值
一个名称列表,我想检索不同数据帧中的每个对应信息,以形成一个新的数据帧 我将列表转换为1列数据帧,然后在不同的数据帧中查找其对应的值 这个想法被形象化为: 我试过:Python 从多个数据帧中查找并返回相应的值,python,pandas,dataframe,Python,Pandas,Dataframe,一个名称列表,我想检索不同数据帧中的每个对应信息,以形成一个新的数据帧 我将列表转换为1列数据帧,然后在不同的数据帧中查找其对应的值 这个想法被形象化为: 我试过: import pandas as pd data = {'Name': ["David","Mike","Lucy"]} data_h = {'Name': ["David","Mike","Peter",
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']]
thenreduce(lambda x,y:pd.merge(x,y,on='Name'),dfs)
@anky-hmmm,我认为应该重新打开它。@jezrael它与dupe-link相同,只是我们正在考虑数据帧的子集。如果您愿意,可以重新打开。但是,我不同意,因为重复链接有很多建议的和写得很好的答案。请注意,这是一个写得很好的问题though@anky-确实是我的奥皮尼谢谢你,先生!选项#1简单的岩石永远是国王。:)祝你和你的家人圣诞快乐,新年快乐!@MarkK-也祝你,也祝你安全健康;)谢谢。