如何在多索引数据框中分割数据

问题描述 投票:1回答:2

作为图片,我有一个名为"overall_zx"[78]的多索引数据框。

YTD2017/YTD2018/YTD2019的销售量和销售量。现在,我要计算价格(销售量除以YTD。我找到了将价格计算为[79]的方法,但是我不知道如何在此表的overall_zx中将其合并。

否则,有什么方法可以直接分割它们?就像单层结构数据框一样例如:

df['price']  = df['sales'] / df['volumns'] 

((在multi-index中,此代码无效)

“

python pandas multi-index
2个回答
0
投票

为了测试,我使用了以下DataFrame(使用拉丁字符作为列名和索引):

   Volume                     Sale                  
  YTD2017 YTD2018 YTD2019  YTD2017  YTD2018  YTD2019
A   212.0   220.0  226.16  3654.04  4163.87  4695.12
B    17.5    18.5   18.57   234.84   274.47   298.90
C    18.5    14.5   12.66   213.02   191.14   177.46

我的第一个观察结果是,仅df.Sale / df.Volume单独[[确实有效,因此,将结果保存在辅助DataFrame(df2)中。到目前为止,我们有:

YTD2017 YTD2018 YTD2019 A 17.236038 18.926682 20.760170 B 13.419429 14.836216 16.095854 C 11.514595 13.182069 14.017378
此结果不能与原始

df

连接,因为df具有一个MultiIndex作为列,而df2具有“普通”索引。但是我们可以

add将缺少的索引级别添加到df2

中的列:df2.columns = pd.MultiIndex.from_product([['Price'], df2.columns])
现在

df2

在列上还包含MultiIndex: Price YTD2017 YTD2018 YTD2019 A 17.236038 18.926682 20.760170 B 13.419429 14.836216 16.095854 C 11.514595 13.182069 14.017378
所以现在加入这两个DataFrame没有障碍:

df = df.join(df2)

获取:

Volume Sale Price YTD2017 YTD2018 YTD2019 YTD2017 YTD2018 YTD2019 YTD2017 YTD2018 YTD2019 A 212.0 220.0 226.16 3654.04 4163.87 4695.12 17.236038 18.926682 20.760170 B 17.5 18.5 18.57 234.84 274.47 298.90 13.419429 14.836216 16.095854 C 18.5 14.5 12.66 213.02 191.14 177.46 11.514595 13.182069 14.017378


0
投票
您可以通过将DataFrame.joinDataFrame.join加倍选择相同的新名称来使用新的MultIndex DataFrame,在此处使用[]

rename

[另一个由price重塑的想法df1  = (df.join(df[['sales']].rename(columns={'sales':'price'}) / 
                df[['volumns']].rename(columns={'volumns':'price'})))

对于新列,将DataFrame.stack用于一种行解决方案:

DataFrame.stack

此替代项有什么相同之处:

DataFrame.unstack

从@Valdi_Bo借用数据:

DataFrame.unstack

© www.soinside.com 2019 - 2024. All rights reserved.