Python 基于另一个数据帧的列名和索引值填充数据帧
我有一个dataframe,dataframe_1,看起来像这样: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
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]