【问题标题】:How to concat several Multiindex Dfs to one df如何将多个 Multiindex Dfs 连接到一个 df
【发布时间】:2020-05-26 03:22:03
【问题描述】:

所以,我有以下两个 Multiindex-Dfs:

data = {('California', 0): 'LA',
        ('California', 1): 'SF',
        ('Texas', 0): 'HO',
        ('New York', 0): 'BX',
        ('New York', 1): 'NY'}
df= pd.Series(data)

df = pd.DataFrame(df)
df

#needs column name
df.index.names = ['state', 'Idx']
df

返回:

                0
state       Idx 
California  0   LA
            1   SF
Texas       0   HO
New York    0   BX
            1   NY

第二个:

data2 = {('California', 0): '20%',
        ('California', 2): '30%'}
df2 = pd.Series(data2)

df2 = pd.DataFrame(df2)
df2

df2.index.names = ['state', 'X']
df2

返回:

            X   0
state           
California  0   20%
            2   30%

现在:我想将两者结合起来,如下所示。

棘手的一点:df Idx 0 和 1 必须与 df2 中的 0 和 2 组合。我该怎么办?

                0
state       Idx 
California  0   LA  20%
            1   SF  30%
Texas       0   HO
New York    0   BX
            1   NY

已经谢谢了!

【问题讨论】:

  • 你想加入 str 吗?

标签: pandas concatenation multi-index


【解决方案1】:

你可以使用:

(pd.concat([df.unstack('state'),
           df2.unstack('state').rename(columns = {0:1}).reset_index(drop=True)]
          ,axis=1)
   .stack().swaplevel().sort_index(level =0))

df.join(df2.reset_index().drop(columns = 'X')
           .set_index('state',append = True)
           .rename(columns = {0:1})
           .swaplevel()
           .rename_axis(index = [*df.index.names])
        )

#                 0    1
#state      Idx         
#California 0    LA  20%
#           1    SF  30%
#Texas      0    HO  NaN
#New York   0    BX  NaN
#           1    NY  NaN

【讨论】:

    猜你喜欢
    • 2021-03-25
    • 1970-01-01
    • 2022-07-28
    • 2016-02-17
    • 1970-01-01
    • 2018-01-21
    • 2019-09-21
    • 2023-03-24
    • 2018-06-04
    相关资源
    最近更新 更多