Python 如何从一个数据帧获取行值,并将其用作从另一个数据帧获取值的引用
我有两个数据帧。一个包含成分的联系信息。另一个是为了将可能属于同一个家庭的成分配对而创建的 样本:Python 如何从一个数据帧获取行值,并将其用作从另一个数据帧获取值的引用,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧。一个包含成分的联系信息。另一个是为了将可能属于同一个家庭的成分配对而创建的 样本: data1 = {'Household_0':['1234567','2345678','3456789','4567890'], 'Individual_0':['1111111','2222222','3333333','4444444'], 'Individual_1':['5555555','6666666','7777777','']} df1=pd.Da
data1 = {'Household_0':['1234567','2345678','3456789','4567890'],
'Individual_0':['1111111','2222222','3333333','4444444'],
'Individual_1':['5555555','6666666','7777777','']}
df1=pd.DataFrame(data1)
data2 = {'Constituent Id':['1234567','2345678','3456789','4567890',
'1111111','2222222','3333333','4444444',
'5555555','6666666','7777777'],
'Display Name':['Clark Kent and Lois Lane','Bruce Banner and Betty Ross',
'Tony Stark and Pepper Pots','Steve Rogers','Clark Kent','Bruce Banner',
'Tony Stark','Steve Rogers','Lois Lane','Betty Ross','Pepper Pots']}
df2=pd.DataFrame(data2)
导致:
df1
Household_0 Individual_0 Individual_1
0 1234567 1111111 5555555
1 2345678 2222222 6666666
2 3456789 3333333 7777777
3 4567890 4444444
df2
Constituent Id Display Name
0 1234567 Clark Kent and Lois Lane
1 2345678 Bruce Banner and Betty Ross
2 3456789 Tony Stark and Pepper Pots
3 4567890 Steve Rogers
4 1111111 Clark Kent
5 2222222 Bruce Banner
6 3333333 Tony Stark
7 4444444 Steve Rogers
8 5555555 Lois Lane
9 6666666 Betty Ross
10 7777777 Pepper Pots
我想使用df1,引用df2中的成分Id
,并创建一个新的数据框架,其中包含成分的名称而不是其Id,以便我们能够确保他们是真正的家庭成员
我相信我可以通过迭代来做到这一点,但这似乎是错误的方法。有一种简单的方法可以做到这一点吗?您可以使用基于
df2
的系列映射df1
中的每个列一次设置索引
成分Id并选择列显示名称。使用apply
对每列重复该操作
print (df1.apply(lambda x: x.map(df2.set_index('Constituent Id')['Display Name'])))
Household_0 Individual_0 Individual_1
0 Clark Kent and Lois Lane Clark Kent Lois Lane
1 Bruce Banner and Betty Ross Bruce Banner Betty Ross
2 Tony Stark and Pepper Pots Tony Stark Pepper Pots
3 Steve Rogers Steve Rogers NaN
您可以通过管道melt
、merge
和pivot\u表
df3 = (
df1
.reset_index()
.melt('index')
.merge(df2, left_on='value', right_on='Constituent Id')
.pivot_table(values='Display Name', index='index', columns='variable', aggfunc='last')
)
print(df3)
输出
variable Household_0 Individual_0 Individual_1
index
0 Clark Kent and Lois Lane Clark Kent Lois Lane
1 Bruce Banner and Betty Ross Bruce Banner Betty Ross
2 Tony Stark and Pepper Pots Tony Stark Pepper Pots
3 Steve Rogers Steve Rogers NaN
您还可以尝试使用.applymap()
将两者链接在一起
reference = df2.set_index('Constituent Id')['Display Name'].to_dict()
df1[df1.columns] = df1[df1.columns].applymap(reference.get)
基本上,您希望将df2
中的所有名称合并起来,以替换5x3数据帧df1
中的Id,您只需拆分具有和
的值,并过滤Id。这非常简洁,适用于不包含Marvel字符的较大数据集。多谢。