Python 3.x 基于一列过滤行';值并计算总和的百分比(单位为)
给定一个小数据集,如下所示:Python 3.x 基于一列过滤行';值并计算总和的百分比(单位为),python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,给定一个小数据集,如下所示: value input 0 3 0 1 4 1 2 3 -1 3 2 1 4 3 -1 5 5 0 6 1 0 7 1 1 8 1 1 我使用了以下代码: df['pct'] = df['value'] / df['value'].sum() 但是我想通过排除input=-1来计算
value input
0 3 0
1 4 1
2 3 -1
3 2 1
4 3 -1
5 5 0
6 1 0
7 1 1
8 1 1
我使用了以下代码:
df['pct'] = df['value'] / df['value'].sum()
但是我想通过排除input=-1
来计算pct
,这意味着如果input
的值是-1
,那么在这种情况下,对于2和4行,将不考虑相应的值来求和,也不需要计算pct
预期结果如下:
value input pct
0 3 0 0.18
1 4 1 0.24
2 3 -1 NaN
3 2 1 0.12
4 3 -1 NaN
5 5 0 0.29
6 1 0 0.06
7 1 1 0.06
8 1 1 0.06
我怎么能在熊猫身上做到呢?谢谢。您可以将未匹配的行通过缺失值求和到序列s
中,并仅将未匹配的行除以掩码筛选的行,最后一轮除以:
编辑:如果可能需要将缺失值替换为0
,请使用where
中的第二个参数将值设置为0
,对于类似替换缺失值的相同输出,此系列也可能求和
:
s = df['value'].where(df['input'] != -1, 0)
df['pct'] = (s / s.sum()).round(2)
print (df)
value input pct
0 3 0 0.18
1 4 1 0.24
2 3 -1 0.00
3 2 1 0.12
4 3 -1 0.00
5 5 0 0.29
6 1 0 0.06
7 1 1 0.06
8 1 1 0.06
谢谢,如果我需要用0
填写NaN
?
s = df['value'].where(df['input'] != -1, 0)
df['pct'] = (s / s.sum()).round(2)
print (df)
value input pct
0 3 0 0.18
1 4 1 0.24
2 3 -1 0.00
3 2 1 0.12
4 3 -1 0.00
5 5 0 0.29
6 1 0 0.06
7 1 1 0.06
8 1 1 0.06