Python 基于另一个数据帧的列名和索引值填充数据帧

Python 基于另一个数据帧的列名和索引值填充数据帧,python,pandas,Python,Pandas,我有一个dataframe,dataframe_1,看起来像这样: 0 1 2 3 4 5 ... 192 0 12 35 60 78 23 90 32 58 59 60 61 62 ... 350 0 1 4 192 4 4 1 1 0 3 3 5 3 4 2 3 1 4 2 2 192

我有一个dataframe,dataframe_1,看起来像这样:

    0   1   2   3   4   5  ...  192
0   12  35  60  78  23  90      32
    58   59   60    61   62 ... 350     
0   1    4    192   4    4      1
1   0    3    3     5    3      4
2   3    1    4     2    2      192
另一个数据帧,dataframe_2,如下所示:

    0   1   2   3   4   5  ...  192
0   12  35  60  78  23  90      32
    58   59   60    61   62 ... 350     
0   1    4    192   4    4      1
1   0    3    3     5    3      4
2   3    1    4     2    2      192
dataframe_2中的值是dataframe_1中的列名。我想做的是根据dataframe_1的列名更改dataframe_2中的值,如下所示:

    58   59   60   61   62 ... 350     
0   35   23   32   23   23     35
1   12   78   78   90   78     23
2   78   35   23   60   60     32
我使用.loc尝试了一个for循环,但没有成功。 非常感谢您的帮助

堆栈
映射
堆栈
df2
,这样我们就可以调用
Series.map
来使用
df1
执行单个矢量化替换


应用
映射

我们在每一列上应用一个映射操作,而不是通过叠加来获得一个序列。

您可以从
df1
定义一个字典,并使用它来替换
df2
中的值:

d = dict(zip(df1.columns, df1.values.ravel()))
df2.replace(d)

   58  59  60  61  62  350
0  35  23  32  23  23   35
1  12  78  78  90  78   23
2  78  35  23  60  60   32

或堆叠df1,然后更换:

df2.replace(df1.stack().droplevel(0))

   58  59  60  61  62  350
0  35  23  32  23  23   35
1  12  78  78  90  78   23
2  78  35  23  60  60   32

使用
替换

d2.replace(dict(zip(d1.columns,d1.iloc[0])))

创建一个查找表,并使用底层的
numpy数组
映射这些值。这假定为整数列名

u = np.zeros(df1.columns.max()+1, dtype=int)
u[df1.columns] = df1.iloc[0].values

u[df2.values]


如果存在与
df1
中的值不匹配的值:

u = np.full(df1.columns.max()+1, np.nan)
u[df1.columns] = df1.iloc[0].values

u[df2.values]
然后,如果需要,使用
df2
填充NA

array([[35, 23, 32, 23, 23, 35],
       [12, 78, 78, 90, 78, 23],
       [78, 35, 23, 60, 60, 32]])
u = np.full(df1.columns.max()+1, np.nan)
u[df1.columns] = df1.iloc[0].values

u[df2.values]