从Pandas中的多个 Dataframe 创建多索引

au9on6nz  于 2023-02-27  发布在  其他
关注(0)|答案(2)|浏览(122)

假设我有

l1 = [[1,2], [3,4], [5,6]]
l2 = [[10,20], [30, 40], [50, 60]]

df1 = pd.DataFrame(l1)
df2 = pd.DataFrame(l2)

df1.index = ["t1", "t2", "t3"]
df2.index = ["t1", "t2", "t3"]
df1.columns = ["A", "B"]
df2.columns = ["A", "B"]

# such that
print(df1)
    A  B
t1  1  2
t2  3  4
t3  5  6

print(df2)
     A   B
t1  10  20
t2  30  40
t3  50  60

# How do I easily create a multi-index dataframe df3 with the structure

print(df3)
      df1 df2
t1
   A  1   10
   B  2   20
t2
   A  3   30
   B  4   40
t3
   A  5   50
   B  6   60

使多索引为[t1,t2,t3],[A,B],列为[df 1,df 2]?
我知道您可以通过pd.MultiIndex或其他方法创建多个索引,但我想要一个简单的解决方案,您可以直接从2/多个 Dataframe 直接创建它。

btxsgosb

btxsgosb1#

您将需要使用整形和连接的组合。

  • df.stack以调整每个DataFrame的形状,使其列成为行索引的第二级行。这将使每个DataFrame变为更长的Series
  • pd.concat以将这些新整形的Series连接在一起。
all_dfs = [df1, df2]
out_df = (
    pd.concat([d.stack() for d in all_dfs], axis='columns')
    # the below code spruces up the column names
    .rename(columns=lambda v: v+1)
    .add_prefix('df')
)

print(out_df)
      df1  df2
t1 A    1   10
   B    2   20
t2 A    3   30
   B    4   40
t3 A    5   50
   B    6   60
kgsdhlau

kgsdhlau2#

首先是concat,然后是stack

out = pd.concat([df1, df2], keys=['df1', 'df2'], axis=1).stack()

输出:

df1  df2
t1 A    1   10
   B    2   20
t2 A    3   30
   B    4   40
t3 A    5   50
   B    6   60

相关问题