【问题标题】:Percentage of a multiindex in PandasPandas 中多索引的百分比
【发布时间】:2018-02-10 01:21:49
【问题描述】:

我需要找到 MultiIndex 列的百分比('count')。我的数据框看起来像:

            count
A  week1     264

   week2      29

B  week1     152

   week2      15

我想添加一列“百分比”来制作

            count percent
A  week1     264      0.9

   week2      29      0.1

B  week1     152     0.91

   week2      15     0.09

我知道我可以通过

找到我想要的总数
mydf.sum(level=[0, 1])

但我似乎无法弄清楚如何将其转化为百分比。

【问题讨论】:

  • df['percent'] = df['count'] / df['count'].sum() 怎么样?
  • df 是一个多索引 - 它由前两列组织。我想要两周内 A 的百分比。 'df['count'] / df['count'].sum(level=['things', 'weeks])' 给出错误
  • 啊好吧,看来@cmaher 有办法了
  • @TomKealy 如果你有兴趣,我已经添加了一个没有 groupby 的方法 :-)

标签: python python-3.x pandas


【解决方案1】:

您可以使用groupbytransform 做到这一点:

df['percent'] = df.groupby(level=0).transform(lambda x: (x / x.sum()).round(2))

#          count  percent
# A week1    264     0.90
#   week2     29     0.10
# B week1    152     0.91
#   week2     15     0.09

【讨论】:

  • 谢谢!那是我生命中的两个小时!
  • 添加了没有groupby的方法
【解决方案2】:

没有groupby

df['percentage']=df['count'].div(df['count'].sum(level=0),level=0)
df
Out[128]: 
         count  percentage
x b                       
A week1    264    0.901024
  week2     29    0.098976
B week1    152    0.910180
  week2     15    0.089820

【讨论】:

  • +1 在这种情况下,您可以避免指定列 (df.div(df.sum(level=0), level=0)),因为只有一个。
猜你喜欢
  • 2016-10-11
  • 2022-10-02
  • 1970-01-01
  • 2020-01-05
  • 2021-11-02
  • 2021-09-28
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多