根据数据框中的其他列,在具有多种条件的 Pandas 中添加列

亨利·布劳思

首先,如果这已经在 StackOverflow 上的某个地方,我很抱歉,我在自己试验了一个小时后搜索了一个小时,但找不到它。我相信一定有一个优雅的(可能是基本的)解决方案。

我有以下数据框:

    Admit   Gender  Dept    Freq
0   Admitted    Male    A   512
1   Rejected    Male    A   313
2   Admitted    Female  A   89
3   Rejected    Female  A   19
4   Admitted    Male    B   353
5   Rejected    Male    B   207
6   Admitted    Female  B   17
7   Rejected    Female  B   8
8   Admitted    Male    C   120
9   Rejected    Male    C   205
10  Admitted    Female  C   202
11  Rejected    Female  C   391
12  Admitted    Male    D   138
13  Rejected    Male    D   279
14  Admitted    Female  D   131
15  Rejected    Female  D   244
16  Admitted    Male    E   53
17  Rejected    Male    E   138
18  Admitted    Female  E   94
19  Rejected    Female  E   299
20  Admitted    Male    F   22
21  Rejected    Male    F   351
22  Admitted    Female  F   24
23  Rejected    Female  F   317

我想添加一个“比例”列,它给出了每个部门按性别划分的成功/失败申请人的比例。

以便:

df.loc[0, 'Proportion'] = 512/(512+313) = 0.6206
df.loc[1, 'Proportion'] = 313/(512+313) = 0.3794
...

等等。

我尝试通过使用以下变体添加“总计”列来开始:

data.groupby(['Dept', 'Gender'])[['Freq']].sum()

但我似乎无法通过原始数据帧的每一行中的值查找此数据帧的值。

我也尝试过使用 lambda 函数,但出现“函数不可迭代”错误。

我想人们可以逐行循环遍历它,因为它是一个小数据集,但是将来当我需要做这样的事情时,这将不是一种选择。

请帮助新手和有抱负的数据科学家。

耶斯列

您可以将列除以divtransform原始大小相同的系列DataFrame

data['new'] = data['Freq'].div(data.groupby(['Dept', 'Gender'])['Freq'].transform('sum'))

apply与自定义函数一起使用

data['new'] = data.groupby(['Dept', 'Gender'])['Freq'].apply(lambda x: x/x.sum())

print (data)
       Admit  Gender Dept  Freq       new
0   Admitted    Male    A   512  0.620606
1   Rejected    Male    A   313  0.379394
2   Admitted  Female    A    89  0.824074
3   Rejected  Female    A    19  0.175926
4   Admitted    Male    B   353  0.630357
5   Rejected    Male    B   207  0.369643
6   Admitted  Female    B    17  0.680000
7   Rejected  Female    B     8  0.320000
8   Admitted    Male    C   120  0.369231
9   Rejected    Male    C   205  0.630769
10  Admitted  Female    C   202  0.340641
11  Rejected  Female    C   391  0.659359
12  Admitted    Male    D   138  0.330935
13  Rejected    Male    D   279  0.669065
14  Admitted  Female    D   131  0.349333
15  Rejected  Female    D   244  0.650667
16  Admitted    Male    E    53  0.277487
17  Rejected    Male    E   138  0.722513
18  Admitted  Female    E    94  0.239186
19  Rejected  Female    E   299  0.760814
20  Admitted    Male    F    22  0.058981
21  Rejected    Male    F   351  0.941019
22  Admitted  Female    F    24  0.070381
23  Rejected  Female    F   317  0.929619

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:在Pandas中,根据条件从数据框中的几列中提取数据,并添加到与某列匹配的其他数据框中

pandas:根据其他列中的条件创建具有字符串值的列

在pandas数据框中添加一列,该列是根据其他列的条件得出的另一列的平均值

通过合并其他列并根据先前的列名重命名,将新列添加到pandas数据框中

根据条件从其他数据框中添加列

根据多种条件在pandas数据框中创建一个新列

根据其他列中的值设置pandas数据框中的列值

根据其他列中的值在python 3(pandas)数据框中创建新列

python pandas-根据其他数据框的列中的值获取数据框

根据pandas数据框中的其他列创建一个聚合列

根据其他两列中的字符串创建pandas数据框列

根据Pandas数据框中的其他三列更改一列的值

根据列对数据框中的日期进行排序,并使用Pandas保持其他列的值

根据python pandas数据框中其他列的值计算新列

根据pandas数据框中的其他列创建新列

根据其他列值/ Pandas -Python 在数据框中创建 ID 列

从Pandas数据框中的其他列创建新列

根据其他数据框的比较,创建带有列的Pandas数据框

根据现有列中的布尔值将列添加到pandas数据框

动态在pandas数据框中添加列

将具有特定单词的字符串值传输到数据框 pandas,python 中的其他列

Pandas 数据框根据其他 2 列的数据添加一列

根据其他列中的值对Pandas数据框进行计数

根据其他列在python pandas数据框中创建子列表的最大值

Pandas:根据其他列中的值变化删除数据框的百分比

按列值复制pandas数据框中的行,并添加具有重复索引的新列

根据一列的总和添加新列,并按Pandas中的其他2列分组

根据其他列数据框中的值添加列

根据多个条件在pandas中添加具有不同输出的两列