两个数据框架的复杂合并



我有两个dataframe:

df1:

top1 top2 top3
693541495124446625    US   GB   CN
912819499544441670    US   CN   TW

df2:

US   GB    CN    TW   ...

693541495124446625  939.00 932.00 806.00 789.00 ...
912819499544441670  992.00 646.00 981.00 796.00 ...

如何合并或迭代两个dataframe以获得以下结果:

top1          top2          top3
693541495124446625    'US 939.00'  'GB 932.00'   'CN 806.00'
912819499544441670    'US 992.00'  'CN 981.00'   'TW 796.00'

我知道我可以迭代取df1值,并通过几个for循环将该值作为列[loc]放在df2中,但是有任何优化的解决方案吗?

您可以尝试使用df.replace

u = df2.astype(str).radd(df2.columns+' ')
out = df1.T.replace(u.T).T

或:

u = df2.astype(str).radd(df2.columns+' ')
df1.T.replace(u.to_dict('index')).T

print(out)
top1      top2      top3
693541495124446625  US 939.0  GB 932.0  CN 806.0
912819499544441670  US 992.0  CN 981.0  TW 796.0

类似

out = df1.T.replace(df2.T).astype('str').radd(df1.T+' ').T
Out[317]: 
top1      top2      top3
693541495124446625  US 939.0  GB 932.0  CN 806.0
912819499544441670  US 992.0  CN 981.0  TW 796.0

首先,将第二个数据帧转换为字典的字典:

df2_dict = {i:None for i in df2.index}
for key in df2_dict:
df2_dict[key] = {col: df2.loc[key, col] for col in df2.columns}

,然后你可以创建一个新的df与ds1相同的行和颜色,并迭代它们:

df3 = pd.DataFrame(index=df1.index,
columns=df1.columns)
for i in df3.index:
for col in df3.columns:
df3.loc[i, col] = df1.loc[i, col] + ' ' + str(df2_dict[i][df1.loc[i, col]])

最新更新