python - 创建一个可以计算分数的列

标签 python pandas

我有一个类似于下面的数据框:

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'])

但是这段代码不起作用

最佳答案

尝试使用 meltcrosstab:

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/

相关文章:

pandas - 来自 Pandas Dataframe 的 Seaborn fiddle 图,每列都有自己单独的 fiddle 图

python - QFileSystemModel QTableView 日期修改突出显示

python - unittest.main() 运行包中的所有测试模块

python - 如何禁用(灰色)Tkinter 中的 Checkbutton?

python - Pandas 中的 for 循环真的很糟糕吗?我什么时候应该关心?

python - 无法连接类型为 "<class ' numpy.ndarray'>"的对象;只有 pd.Series、pd.DataFrame 和 pd.Panel(已弃用)objs 有效

python - 根据条件分成不同的行

python - tkinter 按钮边框的一半是白色的?

python - 从不同的功能在python中通过串行发送数据

python - 属性错误 : 'pywintypes.datetime' object has no attribute 'nanosecond'