Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 基于一列过滤行';值并计算总和的百分比(单位为)_Python 3.x_Pandas_Dataframe - Fatal编程技术网

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