首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多索引数据中划分数据

如何在多索引数据中划分数据
EN

Stack Overflow用户
提问于 2019-11-30 04:42:31
回答 2查看 95关注 0票数 2

如图所示,我有一个名为"overall_zx"[78]的多索引数据。

YTD2017/YTD2018/YTD2019有销量和容量。现在我要计算价格(销售额除以单个YTD)。我找到了用[79]来计算价格的方法,但是我不知道如何在overall_zx中组合这个表。

否则,有没有办法直接把它们分开呢?就像单元组的数据格式。例如:

代码语言:javascript
复制
df['price']  = df['sales'] / df['volumns'] 

(在multi-index中,此代码不起作用)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-30 06:52:08

您可以将DataFrame.join与新的MultIndex DataFrame一起使用,方法是选择by double []rename以相同的新名称,此处为price

代码语言:javascript
复制
df1  = (df.join(df[['sales']].rename(columns={'sales':'price'}) / 
                df[['volumns']].rename(columns={'volumns':'price'})))

DataFrame.stackDataFrame.unstack重塑的另一个想法

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

代码语言:javascript
复制
df1 = df.stack().assign(price = lambda x: x['sales'] / x['volumns']).unstack()

与此类似的是:

代码语言:javascript
复制
df1 = df.stack()
df1['price'] = df1['sales'] / df1['volumns']
df1 = df1.unstack()

数据借用自@Valdi_Bo:

代码语言:javascript
复制
print (df1)
  volumns                    sales                        price             \
  YTD2017 YTD2018 YTD2019  YTD2017  YTD2018  YTD2019    YTD2017    YTD2018   
A   212.0   220.0  226.16  3654.04  4163.87  4695.12  17.236038  18.926682   
B    17.5    18.5   18.57   234.84   274.47   298.90  13.419429  14.836216   
C    18.5    14.5   12.66   213.02   191.14   177.46  11.514595  13.182069   


     YTD2019  
A  20.760170  
B  16.095854  
C  14.017378  
票数 2
EN

Stack Overflow用户

发布于 2019-11-30 06:09:10

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

代码语言:javascript
复制
   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)中。到目前为止,我们已经:

代码语言:javascript
复制
     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有一个“普通”索引。

但是我们可以将缺少的索引级别添加到df2中的列中

代码语言:javascript
复制
df2.columns = pd.MultiIndex.from_product([['Price'], df2.columns])

现在,df2还包含列上的MultiIndex

代码语言:javascript
复制
       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

因此,现在加入这2 DataFrames没有任何障碍:

代码语言:javascript
复制
df = df.join(df2)

得到:

代码语言:javascript
复制
   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 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59113241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档