Pandas: Merging/Organizing 表进入新 table
Pandas: Merging/Organizing Tables into a new table
在 pandas 中 merge/consolidate 多个 table 的最佳方法是什么?为简单起见,假设我们有 3 个简单的 table 作为数据框,如下所示:
表 1
AA_max 55
AA_min 40
BB_max 23
BB_min 10
表 2
AA_max 55
AA_min 40
表 3
AA_max 85
AA_min 10
BB_max 23
BB_min 10
如何生成合并的 table,如下所示:
Item | Table1 min | Table1 max | Table2 min | Table2 max | Table3 min | Table3 max
AA 40 55 40 55 10 85
BB 10 23 10 23
使用pandas是否可行?如果不是,是否最好只迭代每个 table 的每一行,插入字典并在迭代时相应地填充列?
假设来自另一个 table 的项目可能存在也可能不存在于其他 table 中。
解决方案
Concat
沿列轴的表格
Split
索引以转换为 multiindex
Unstack
级别=1 重塑
- 使用
map
和 join
展平多级列
tables = [df1, df2, df3]
out = pd.concat({f'Table_{i}': df.set_index('name')['val']
for i, df in enumerate(tables, 1)}, axis=1)
out.index = out.index.str.split('_', expand=True)
out = out.unstack()
out.columns = out.columns.map('_'.join)
结果
print(out)
Table_1_max Table_1_min Table_2_max Table_2_min Table_3_max Table_3_min
AA 55 40 55.0 40.0 85 10
BB 23 10 NaN NaN 23 10
在 pandas 中 merge/consolidate 多个 table 的最佳方法是什么?为简单起见,假设我们有 3 个简单的 table 作为数据框,如下所示:
表 1
AA_max 55
AA_min 40
BB_max 23
BB_min 10
表 2
AA_max 55
AA_min 40
表 3
AA_max 85
AA_min 10
BB_max 23
BB_min 10
如何生成合并的 table,如下所示:
Item | Table1 min | Table1 max | Table2 min | Table2 max | Table3 min | Table3 max
AA 40 55 40 55 10 85
BB 10 23 10 23
使用pandas是否可行?如果不是,是否最好只迭代每个 table 的每一行,插入字典并在迭代时相应地填充列?
假设来自另一个 table 的项目可能存在也可能不存在于其他 table 中。
解决方案
Concat
沿列轴的表格Split
索引以转换为 multiindexUnstack
级别=1 重塑- 使用
map
和join
展平多级列
tables = [df1, df2, df3]
out = pd.concat({f'Table_{i}': df.set_index('name')['val']
for i, df in enumerate(tables, 1)}, axis=1)
out.index = out.index.str.split('_', expand=True)
out = out.unstack()
out.columns = out.columns.map('_'.join)
结果
print(out)
Table_1_max Table_1_min Table_2_max Table_2_min Table_3_max Table_3_min
AA 55 40 55.0 40.0 85 10
BB 23 10 NaN NaN 23 10