gpt4 book ai didi

python - 将分类变量的 Pandas DataFrame 转换为具有计数和比例的 MultiIndex

转载 作者:太空宇宙 更新时间:2023-11-03 13:09:12 33 4
gpt4 key购买 nike

我有一个包含多个分类变量的 Pandas DataFrame。例如:

import pandas as pd

d = {'grade':['A','B','C','A','B'],
'year':['2013','2013','2013','2012','2012']}

df = pd.DataFrame(d)

enter image description here

我想将其转换为具有以下属性的 MultiIndex DataFrame:

  • 第一级索引是变量名(例如'grade')
  • 二级索引是变量内的级别(例如“A”、“B”、“C”)
  • 一列包含'n',表示级别出现的次数
  • 第二列包含“比例”,即此级别所代表的比例。

例如:

enter image description here

谁能建议一种创建此 MultiIndex DataFrame 的方法?

最佳答案

另一种方法是使用 meltgroupby:

df_out = df.melt().groupby(['variable','value']).size().to_frame(name='n')
df_out['proportion'] = df_out['n'].div(df_out.n.sum(level=0),level=0)
print(df_out)

输出:

                n  proportion
variable value
grade A 2 0.4
B 2 0.4
C 1 0.2
year 2012 2 0.4
2013 3 0.6

而且,如果你真的想发疯并在一行中完成:

(df.melt().groupby(['variable','value']).size().to_frame(name='n')
.pipe(lambda x: x.assign(proportion = x[['n']]/x.groupby(level=0).transform('sum'))))

使用@Wen pct 计算的升级解决方案:

(df.melt().groupby(['variable','value']).size().to_frame(name='n')
.pipe(lambda x: x.assign(proportion = x['n'].div(x.n.sum(level=0),level=0))))

关于python - 将分类变量的 Pandas DataFrame 转换为具有计数和比例的 MultiIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48014637/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com