首页 > 解决方案 > 数据框映射练习

问题描述

我刚开始使用 Python,我阻止了一个简单的练习。我有 3 个数据框,如下所示:

df1:

   A B C         
 0 1 2 3           
 1 4 5 6    

df2(空):

   D E F G H
0
1

地图:

   m1 m2 m3 m4 m5
0  D  F  H
1  A  B  C

我想编写一个脚本,根据 dfmap 的映射填充 df2。所以输出应该是

df2:

   D E F G H
0  1   2   3
1  4   5   6

我开始了这段代码,但我想我错过了 Dataframe 的所有功能(而且它不起作用 Array_df2 充满了 nan)我知道它应该存在一种最聪明/最简单的方法来做到这一点。

listcol_df1 = {}
listcol_df2 = {}

for idx, col in enumerate(df1.columns):
    listcol_df1[col] = idx
    
for idx, col in enumerate(df2.columns):
    listcol_df2[col] = idx

Array_df1 = df1.values
Array_df2 = df2.values
Array_dfmap = dfmap.values

for i in range(df1.shape[0]):
    for j in range(dfmap.shape[1]):
        df2[i][listcol_df2.get(Array_dfmap[0][j])] = Array_df1[i][listcol_df1.get(Array_dfmap[1][j])]

谢谢

标签: pythonpandasdataframe

解决方案


这是一个替代方法,只是循环遍历 的列,但如果包含不在其他 DF 中的列名dfmap,您可能需要添加异常处理:dfmap

for col in dfmap:
    df2[dfmap[col].loc[0]] = df1[dfmap[col].loc[1]]

解释一下,循环遍历 in 中的列名dfmap,然后这个语法 - dfmap[col].loc[X]- 只选择 in 中的列dfmap,然后是行(.loc[0]选择第一行中.loc[1]的值,选择第二行中的值)。现在我想了想,这也可以更简单地写成dfmap.loc[X, col]X 是每种情况下的行号。


推荐阅读