首页 > 解决方案 > 如何删除第一级索引,然后将剩余的索引值与 pd DataFrame 的自定义逻辑合并?

问题描述

假设我有一个像这样的 MultiIndex DataFrame:

                             price     volume
year   product   city
2010   A         LA          10        7
       B         SF          7         9 
       C         NY          7         6 
                 LA          18        21
                 SF          4         8
2011   A         LA          13        5 
       B         SF          2         4 
       C         NY          9         3
                 SF          2         0

我想做一个有点复杂的合并,其中删除 DataFrame 索引(年份)的第一级,并根据一些自定义逻辑合并 DataFrame 中现在第一级索引(产品)中的重复项。在这种情况下,我希望能够将 price 列设置为使用 2010 外部索引中的值,将 volume 列设置为使用 2011 外部索引中的值,但我想要一个可以应用于更多的通用解决方案列应该存在。

最终的 DataFrame 看起来像这样,其中价格值来自 2010 年指数,成交量值来自 2011 年指数,缺失值用 NaN 填充。

                      price     volume
product   city
A         LA          10        5
B         SF          7         4 
C         NY          7         3 
          LA          18        NaN
          SF          4         0

标签: pythonpython-3.xpandasdataframemerge

解决方案


您可以按第一级选择,DataFrame.xs然后concat

df = pd.concat([df.xs(2010)['price'], df.xs(2011)['volume']], axis=1)

也可以使用loc

df = pd.concat([df.loc[2010, 'price'], df.loc[2011, 'volume']], axis=1)

print (df)
              price  volume
product city               
A       LA       10     5.0
B       SF        7     4.0
C       LA       18     NaN
        NY        7     3.0
        SF        4     0.0

推荐阅读