python - 根据列值将数据从一个 Pandas 数据框复制到另一个

标签 python pandas dataframe

我有两个数据框 df1 和 df2 df1 如下所示

Index YH   HE  MT  CU  EI
 0    Dot  Sf  Sy  Lc  
 1    Rls  Bd  Sa  Ta  
 2    Fs       Ft  Rg     

df2就像

Index   Z1   Z2  Z3
 0      YH       HE
 1      HE       EI
 2      MT       CU  

我想根据 df2 中与 df1 中的列名称匹配的单元格值将值从 df1 复制到 df2 所以我的 df3 应该是这样的

df3

Index Z1   Z2   Z3
  0   YH        HE
  1   Dot       Sf  
  2   Rls       Bd
  3   Fs        EI
  4   HE        CU
  5   Sf        Lc
  6   Bd        Ta
  7   MT        Rg
  8   Sy
  9   Sa
  10  Ft

基本上我想根据 df2 的单元格值将 df1 中的列复制到 df2 中,它是 df1 中的列名

如果还是不明白请告诉我

最佳答案

这里涉及到很多函数...

s=df2.set_index('Index').astype(object).apply(lambda x : x.map(df1.set_index('Index').to_dict('l')))
m=pd.concat([df2.set_index('Index').applymap(lambda x : [x]),s]).sort_index().sum(level=0).sum()
pd.DataFrame(m.tolist(),index=m.index).T.reindex(columns=df2.columns[1:]).fillna('')
Out[1721]: 
     Z1 Z2  Z3
0    YH     HE
1   Dot     Sf
2   Rls     Bd
3    Fs       
4    HE     EI
5    Sf       
6    Bd       
7             
8    MT     CU
9    Sy     Lc
10   Sa     Ta
11   Ft     Rg

得到你所需要的

pd.DataFrame(m.tolist(),index=m.index).T.reindex(columns=df2.columns[1:]).replace('',np.nan).dropna(thresh=1,axis=0).fillna('')
Out[1724]: 
     Z1 Z2  Z3
0    YH     HE
1   Dot     Sf
2   Rls     Bd
3    Fs       
4    HE     EI
5    Sf       
6    Bd       
8    MT     CU
9    Sy     Lc
10   Sa     Ta
11   Ft     Rg

关于python - 根据列值将数据从一个 Pandas 数据框复制到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48950791/

相关文章:

python - Pandas:将列表列表转换为多列

python - 从字符串中删除十六进制表示 - Python

python 异常处理

python - 使用 flutter 创建股票的蜡烛图

python - 如何使用元组值对字典来填充pandas数据框?

r - 使用 for 循环从一个基于值的值创建多个数据框

python - 尝试将项目从列移动到行中,但不转置,也不从长到宽

python - 我可以使用 applymap 更改数据框的变量名称吗

python - Discord 丰富的嵌入按钮

python - Pandas Dataframe Groupby 连接字符串,同时保留字符串的顺序