python - 数据框映射练习
问题描述
我刚开始使用 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])]
谢谢
解决方案
这是一个替代方法,只是循环遍历 的列,但如果包含不在其他 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 是每种情况下的行号。
推荐阅读
- python-3.x - 使用带有 keras 和 OpenCv 的过滤器?
- google-tag-manager - GTM - 自定义 HTML - 解析错误。预期的主要表达
- python - Enum _missing_ 函数没有使 ValueError 静音
- autohotkey - 如何使用自动热键获取一周的日期
- owasp - 如何有效分析 OWASP ZAP 扫描结果
- reactjs - 从另一个类 React-Native 调用函数
- java - 如何将自定义注释应用于列表
? - c# - EFCore 3 - 保存项目抛出 sql 异常“无法更新标识列”
- r - 使用循环将目录中的 .txt 文件转换为 .CSV 文件
- c# - XAML DatePicker 没有一年?