首页 > 解决方案 > 根据列索引添加行

问题描述

我有一个包含以下列的数据框:

 id     index1    index2    value
 DivA     1         4        3
 DivA     3         6        4
 DivB     1         3        5
 DivB     5         7        3

在另一个数据框上,我有以下内容:

 id      index
DivA       1
DivA       2
      ...
DivA       10
DivB       1
      ...

最终结果:df2:

 id      index    value
DivA       1        3
DivA       2       nan (because no value in df1)
DivA       3        4
DivA       4        3
      ...
DivA       10       nan (because no value in df1)
DivB       1        5
      ...

我想知道我是否可以以组合“index1”和“index2”的方式向第二个df添加一个新列“value”,如果没有值,第二个df中的“value”可以有“nan”在第一个数据框“值”中?

谢谢你的帮助 !

标签: pythonpython-3.xpandasdataframe

解决方案


  #pd.melt first dataframe
    df3=pd.melt(df, id_vars=['id','value'], value_vars=['index1', 'index2'], value_name='index').drop(columns=['variable'])

#pd.concat second dataframe to the pd.met result, sort-values and drop duplicates in index 
(pd.concat([df3, df1], ignore_index=True).sort_values(by=['id','index'])).drop_duplicates(subset=['index'],keep='first')



     id  value  index
0   DivA    3.0      1
9   DivA    NaN      2
1   DivA    4.0      3
4   DivA    3.0      4
5   DivA    4.0      6
10  DivA    NaN     10
3   DivB    3.0      5
7   DivB    3.0      7

推荐阅读