【问题标题】:Copying data from one pandas dataframe to other based on column value根据列值将数据从一个熊猫数据框复制到另一个数据框
【发布时间】:2018-08-03 16:24:02
【问题描述】:

我有两个数据框 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 中的列名

如果还是很困惑,请告诉我

【问题讨论】:

  • pandas 中的标准任务,有关标准方法,请参阅loc 上的文档,但 numpy where 也适用。再次,只需查看文档或解决此问题的数百个堆栈溢出问题中的任何一个;-)

标签: python pandas dataframe


【解决方案1】:

这涉及到很多功能...

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

【讨论】:

  • 索引不是一个单独的列,它只是数据框的默认索引
  • @Rookie_123 是的,所以你不需要 set_index() :-)
  • 是的 :) 我只是在告诉其他人不会感到困惑 :)
  • 这个解决方案太棒了 有一个新的方法感谢它:)
  • @Rookie_123 yw~ :-) 快乐编码
猜你喜欢
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 2014-12-27
  • 2019-09-28
  • 1970-01-01
  • 2019-01-20
相关资源
最近更新 更多