根据另一列计算 groupby 中的百分比
Calculate percentages in groupby, based on another column
我有一个 table 喜欢:
月份
二进制
Value_missing
Total_value
1
N
40
120
1
Y
5
50
2
N
30
200
2
Y
10
20
我想在 pandas 中计算一个 groupby,它根据 Total_value 给我列 Value_missing 的百分比。我希望得到:
月份
二进制
Value_missing
Total_value
%_Value_missing
1
N
40
120
0,235
1
Y
5
50
0,029
2
N
30
200
0,1363
2
Y
10
20
0,045
对于 Value_missing 列中的每一行/单元格,我想除以 Total_Value 按月份汇总的总和
第一行的微积分示例:40 / (120 + 50) = 0,235
谢谢!
这是一种方法:
df['%_Value_missing'] = df['Value_missing'].div(df.groupby('Month')['Total_value'].transform(sum))
选择:
df['%_Value_missing'] = df.groupby('Month').apply(lambda x: x['Value_missing'] / x['Total_value'].sum()).values
输出:
Month Binary Value_missing Total_value %_Value_missing
0 1 N 40 120 0.235294
1 1 Y 5 50 0.029412
2 2 N 30 200 0.136364
3 2 Y 10 20 0.045455
一些性能比较:
%%timeit
df['Value_missing'].div(df.groupby('Month')['Total_value'].transform(sum))
541 µs ± 19.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df.groupby('Month').apply(lambda x: x['Value_missing'] / x['Total_value'].sum()).values
1.55 ms ± 4.61 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
我有一个 table 喜欢:
月份 | 二进制 | Value_missing | Total_value |
---|---|---|---|
1 | N | 40 | 120 |
1 | Y | 5 | 50 |
2 | N | 30 | 200 |
2 | Y | 10 | 20 |
我想在 pandas 中计算一个 groupby,它根据 Total_value 给我列 Value_missing 的百分比。我希望得到:
月份 | 二进制 | Value_missing | Total_value | %_Value_missing |
---|---|---|---|---|
1 | N | 40 | 120 | 0,235 |
1 | Y | 5 | 50 | 0,029 |
2 | N | 30 | 200 | 0,1363 |
2 | Y | 10 | 20 | 0,045 |
对于 Value_missing 列中的每一行/单元格,我想除以 Total_Value 按月份汇总的总和
第一行的微积分示例:40 / (120 + 50) = 0,235
谢谢!
这是一种方法:
df['%_Value_missing'] = df['Value_missing'].div(df.groupby('Month')['Total_value'].transform(sum))
选择:
df['%_Value_missing'] = df.groupby('Month').apply(lambda x: x['Value_missing'] / x['Total_value'].sum()).values
输出:
Month Binary Value_missing Total_value %_Value_missing
0 1 N 40 120 0.235294
1 1 Y 5 50 0.029412
2 2 N 30 200 0.136364
3 2 Y 10 20 0.045455
一些性能比较:
%%timeit
df['Value_missing'].div(df.groupby('Month')['Total_value'].transform(sum))
541 µs ± 19.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df.groupby('Month').apply(lambda x: x['Value_missing'] / x['Total_value'].sum()).values
1.55 ms ± 4.61 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)