首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groupby和将一组行划分为另一组

Groupby和将一组行划分为另一组
EN

Stack Overflow用户
提问于 2021-08-05 18:17:57
回答 2查看 115关注 0票数 3

我有一个数据框架:

代码语言:javascript
复制
df = pd.DataFrame({ 
    'Metric': ['Total Assets', 'Total Promo', 'Total Assets', 'Total Promo'],
    'Product': ['AA', 'AA', 'BB', 'BB'],
    'Risk': ['High', 'High','Low', 'Low'],
    '202101': [ 200, 100, 400, 100], 
    '202102': [ 200, 100, 400, 100],
    '202103': [ 200, 100, 400, 100]})

我希望按产品和风险分组,并将行与总资产和总促销分开。我希望输出是这样的:

代码语言:javascript
复制
df = pd.DataFrame({ 
    'Product': ['AA', 'BB'],
    'Risk': ['High', 'Low',],
    '202101': [ 2, 4], 
    '202102': [ 2, 4],
    '202103': [ 2, 4]})

到目前为止,我的方法是先尝试融合成长形式。但我似乎无法将总资产和总促销添加到列中,以便能够划分列

代码语言:javascript
复制
df = pd.melt(df, id_vars=['Metric', 'Product', 'Risk'], 
        value_vars = ["202101", "202102", "202103"],
        var_name='Months', value_name='Balance')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-05 18:30:22

这里有一种方法:

代码语言:javascript
复制
df1 = df.set_index(['Metric', 'Product', 'Risk']).stack().unstack(0)
df = (df1['Total Assets'] / df1['Total Promo']).unstack(-1).reset_index()

输出:

代码语言:javascript
复制
  Product  Risk  202101  202102  202103
0      AA  High     2.0     2.0     2.0
1      BB   Low     4.0     4.0     4.0
票数 4
EN

Stack Overflow用户

发布于 2021-08-05 22:28:11

由于每个分组只有两行,并且它们是有序的,因此包含相关列的groupby以及pipe应该就足够了:

代码语言:javascript
复制
(df.iloc[:, 1:]
   .groupby(['Product', 'Risk'])
   .pipe(lambda df: df.first()/df.last())
)

              202101  202102  202103
Product Risk                        
AA      High     2.0     2.0     2.0
BB      Low      4.0     4.0     4.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68671686

复制
相关文章

相似问题

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