通过调用 df2 中列出的 df1 的索引来创建 Dataframe

Create Dataframe by calling indices of df1 that are listed in df2

我是 Python Pandas 的新手,现在一直在努力解决以下问题。

以下数据帧 df1 值显示了与应该调用的 df2 值耦合的索引

              Name1        Name2 ...        Name160          Name161
0              62            18  ...          NaN               75
1              79            46  ...          NaN               5
2               3            26  ...          NaN               0

df2 包含属于必须调用的索引的值。

              Name1         Name2  ...              Name160                 Name161
0             152.0         204.0  ...                NaN                    164.0
1             175.0         308.0  ...                NaN                    571.0
2             252.0         695.0  ...                NaN                    577.0
3             379.0         722.0  ...                NaN                    655.0
4             398.0         834.0  ...                NaN                    675.0
..              ...           ...  ...                ...                      ...
213             NaN           NaN  ...                NaN                      NaN
214             NaN           NaN  ...                NaN                      NaN
215             NaN           NaN  ...                NaN                      NaN
216             NaN           NaN  ...                NaN                      NaN
217             NaN           NaN  ...                NaN                      NaN

例如,df1 在 'Name161' 列中显示值“0”。然后 df3 应该显示 df2 中列出的索引为 0 的值。在本例中为“164”。

到目前为止,我得到的 df3 显示了 df2 的前 3 个值,但这当然不是我想要实现的。

Input:

    df3 = df1*0
    for c in df1.columns:
          df3[c]= df2[c]
    print(df3)

Output:
        
                    Name1        Name2   ...              Name160                 Name161
        0           152.0         204.0  ...                NaN                    164.0
        1           175.0         308.0  ...                NaN                    571.0
        2           252.0         695.0  ...                NaN                    577.0

非常感谢任何帮助,谢谢!

使用DataFrame.stack with Series.reset_index for reshape both DataFrames, then merging by DataFrame.merge with left join and last pivoting by DataFrame.pivot:

#change index values for match by sample data in df2
print (df1)
   Name1  Name2  Name160  Name161
0      2      4      NaN        4
1      0    213      NaN      216
2      3      2      NaN        0

df11 = df1.stack().reset_index(name='idx')
df22 = df2.stack().reset_index(name='val')

df = (df11.merge(df22, 
                 left_on=['idx','level_1'], 
                 right_on=['level_0','level_1'], 
                 how='left')
         .pivot('level_0_x','level_1','val')
         .reindex(df1.columns, axis=1)
         .rename_axis(None)
         )
print (df)
   Name1  Name2  Name160  Name161
0  252.0  834.0      NaN    675.0
1  152.0    NaN      NaN      NaN
2  379.0  695.0      NaN    164.0