在 pandas 数据框中使用多索引连接数据框
Posted
技术标签:
【中文标题】在 pandas 数据框中使用多索引连接数据框【英文标题】:Concatenate dataframes with multi-index in pandas dataframe 【发布时间】:2017-09-11 08:18:28 【问题描述】:我有两个数据框 df1
和 df2
:
In [56]: df1.head()
Out[56]:
col7 col8 col9
alpha0 D0 alpha0 D0 alpha0 D0
F35_HC_531d.dat 1.103999 1.103999 1.364399 1.358938 3.171808 1.946894
F35_HC_532d.dat 0.000000 0.000000 1.636934 1.635594 4.359431 2.362530
F35_HC_533d.dat 0.826599 0.826599 1.463956 1.390134 3.860629 2.199387
F35_HC_534d.dat 1.055350 1.020555 3.112200 2.498257 3.394307 2.090668
F52_HC_472d.dat 3.808008 2.912733 3.594062 2.336720 3.027449 2.216112
In [62]: df2.head()
Out[62]:
col7 col8 col9
alpha1 alpha2 alpha1 alpha2 alpha1 alpha2
filename
F35_HC_532d.dat 1.0850 2.413 0.7914 6.072000 0.8418 5.328
M48_HC_551d.dat 0.7029 4.713 0.7309 2.922000 0.7823 3.546
M24_HC_458d.dat 0.7207 5.850 0.6772 5.699000 0.7135 5.620
M48_HC_552d.dat 0.7179 4.783 0.6481 4.131999 0.7010 3.408
M40_HC_506d.dat 0.7602 2.912 0.8420 5.690000 0.8354 1.910
我想连接这两个数据框。请注意,两者的外部列名称相同,因此我只想在新数据框中查看 4 个子列。我尝试使用 concat 作为:
df = pd.concat([df1, df2], axis = 1, levels = 0)
但这会产生一个数据框,其列的名称从 col7
到 col9
两次(因此数据框有 6 个外部列)。如何将级别 1 中的所有列放在相同的外部列名下?
【问题讨论】:
【参考方案1】:您可以将join
与参数how='outer'
一起使用
df1.join(df2, how='outer').sort_index(1)
【讨论】:
不错!我不明白为什么sort_index
去掉了重复的列名。有什么意见吗?
@Peaceful 他们还在那里。当您在索引的早期级别中有连续值时,您是 pandas 出于美观原因选择组合表格列
但为什么sort_index
会这样做呢?或者这甚至在一般情况下是正确的?例如,如果有一个函数merge_repeated_columns
,那是可以理解的。我错过了什么明显的东西吗?
@Peaceful 如果它没有排序,那么你就不会将同一第一级的所有列放在一起。然后你必须显示每个列标题,因为它没有直观意义。只有排序后才能让它看起来漂亮【参考方案2】:
您可以添加sort_index
用于排序列:
df = pd.concat([df1, df2], axis = 1, levels=0).sort_index(axis=1)
print (df)
col7 col8 \
D0 alpha0 alpha1 alpha2 D0 alpha0
F35_HC_531d.dat 1.103999 1.103999 NaN NaN 1.358938 1.364399
F35_HC_532d.dat 0.000000 0.000000 1.0850 2.413 1.635594 1.636934
F35_HC_533d.dat 0.826599 0.826599 NaN NaN 1.390134 1.463956
F35_HC_534d.dat 1.020555 1.055350 NaN NaN 2.498257 3.112200
F52_HC_472d.dat 2.912733 3.808008 NaN NaN 2.336720 3.594062
M24_HC_458d.dat NaN NaN 0.7207 5.850 NaN NaN
M40_HC_506d.dat NaN NaN 0.7602 2.912 NaN NaN
M48_HC_551d.dat NaN NaN 0.7029 4.713 NaN NaN
M48_HC_552d.dat NaN NaN 0.7179 4.783 NaN NaN
col9
alpha1 alpha2 D0 alpha0 alpha1 alpha2
F35_HC_531d.dat NaN NaN 1.946894 3.171808 NaN NaN
F35_HC_532d.dat 0.7914 6.072000 2.362530 4.359431 0.8418 5.328
F35_HC_533d.dat NaN NaN 2.199387 3.860629 NaN NaN
F35_HC_534d.dat NaN NaN 2.090668 3.394307 NaN NaN
F52_HC_472d.dat NaN NaN 2.216112 3.027449 NaN NaN
M24_HC_458d.dat 0.6772 5.699000 NaN NaN 0.7135 5.620
M40_HC_506d.dat 0.8420 5.690000 NaN NaN 0.8354 1.910
M48_HC_551d.dat 0.7309 2.922000 NaN NaN 0.7823 3.546
M48_HC_552d.dat 0.6481 4.131999 NaN NaN 0.7010 3.408
【讨论】:
太棒了!你能解释一下这是如何工作的吗?以上是关于在 pandas 数据框中使用多索引连接数据框的主要内容,如果未能解决你的问题,请参考以下文章