python - 合并多个 DataFrames Pandas
问题描述
这可能被认为是对各种方法的彻底解释的重复,但是由于数据框数量较多,我似乎无法在那里找到解决问题的方法。
我有多个数据框(超过 10 个),每个都在一列中不同VARX
。这只是一个快速且过于简单的示例:
import pandas as pd
df1 = pd.DataFrame({'depth': [0.500000, 0.600000, 1.300000],
'VAR1': [38.196202, 38.198002, 38.200001],
'profile': ['profile_1', 'profile_1','profile_1']})
df2 = pd.DataFrame({'depth': [0.600000, 1.100000, 1.200000],
'VAR2': [0.20440, 0.20442, 0.20446],
'profile': ['profile_1', 'profile_1','profile_1']})
df3 = pd.DataFrame({'depth': [1.200000, 1.300000, 1.400000],
'VAR3': [15.1880, 15.1820, 15.1820],
'profile': ['profile_1', 'profile_1','profile_1']})
对于相同的轮廓,每个df
都有相同或不同的深度,所以
我需要创建一个新的 DataFrame,它将合并所有单独的 DataFrame,其中操作的关键列是depth
和profile
,每个配置文件的所有出现深度值。
因此,该VARX
值应该是NaN
该剖面没有该变量的深度测量值。
结果应该是一个新的、压缩的 DataFrame,其中所有列都作为and的VARX
附加列,如下所示:depth
profile
name_profile depth VAR1 VAR2 VAR3
profile_1 0.500000 38.196202 NaN NaN
profile_1 0.600000 38.198002 0.20440 NaN
profile_1 1.100000 NaN 0.20442 NaN
profile_1 1.200000 NaN 0.20446 15.1880
profile_1 1.300000 38.200001 NaN 15.1820
profile_1 1.400000 NaN NaN 15.1820
请注意,配置文件的实际数量要大得多。
有任何想法吗?
解决方案
考虑在每个数据帧上设置索引,然后运行水平合并pd.concat
:
dfs = [df.set_index(['profile', 'depth']) for df in [df1, df2, df3]]
print(pd.concat(dfs, axis=1).reset_index())
# profile depth VAR1 VAR2 VAR3
# 0 profile_1 0.5 38.198002 NaN NaN
# 1 profile_1 0.6 38.198002 0.20440 NaN
# 2 profile_1 1.1 NaN 0.20442 NaN
# 3 profile_1 1.2 NaN 0.20446 15.188
# 4 profile_1 1.3 38.200001 NaN 15.182
# 5 profile_1 1.4 NaN NaN 15.182
推荐阅读
- r - 如何整理绘图中的 x 轴
- c++ - 在 C++ 代码中将数组的数据类型从 int 更改为 long long 并将 INT_MAX 更改为 LLONG_MAX 是如何导致运行时错误的?
- powershell - 如何检查设备启动模式(UEFI 或 Legacy)?
- powershell - [System.IO.File]::ReadAlltext($File) OutOfMemory 错误
- javascript - 如何绕过 Gatsby 构建期间未定义的窗口?如果检查不起作用
- python - 将运行索引添加到按用户 id 分区的 pandas
- python - python flask render_template 和另一个返回值
- php - 从表单更新php关联数组值
- android - 如何将动态功能模块更改为普通模块?(请从您的 build.gradle 文件中删除 'multiDexEnabled true|false'。`)
- html - 页脚看不到弹性框,所以它位于图像的顶部。如何将页脚响应式地放到网页底部?