我有一个类似于下面的数据框:
name x y
Sam 1 NA
John 1 NA
Lilly 0 1
Lilly 1 1
John NA 0
Sam 1 NA
从这个数据框中,我希望创建两个新列,分别称为 percentage_0 和 percentage_1
对于每个名字,我计算1的百分比和0的百分比。例如。 Lilly一共有4个值0,1,1,1,return应该是percentage_0: 0.25和percentage 1: 0.75
最终返回应该是这样的
name percentage_0 percentage 1
Sam 0 1
John 0.5 0.5
lilly 0.25 0.75
我的代码是
df['percentage_0'] = df[df['x'] == 1].count()/len(df['name'])
但是这段代码不起作用
最佳答案
尝试使用 melt
和 crosstab
:
s=df.melt('name').dropna()
out = (pd.crosstab(s['name'], s['value'], normalize='index')
.add_prefix('percentage_')
)
输出:
value percentage_0.0 percentage_1.0
name
John 0.50 0.50
Lilly 0.25 0.75
Sam 0.00 1.00
更新:melt
可能会很慢,尝试使用 groupby:
groups = df.groupby('name')
out = (groups['x'].value_counts().rename_axis(index=('name',None))
.add(groups['y'].value_counts().rename_axis(index=('name',None)), fill_value=0)
.unstack(fill_value=0)
)
out.div(out.sum(1), axis=0)
关于python - 创建一个可以计算分数的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67171875/