python的新手。我敢肯定有一个非常简单的解决方案,但是我正在努力寻找它。
我有一系列正负数。我想知道阳性数字的百分比。我已经完成了整个数据集的工作,但是我希望计算可以在每一行中进行。
我正在使用的数据集很大,但这是一个示例:
import pandas as pd
data = {'numbers': [100, 300, 150, -150, -75, -100]}
df = pd.DataFrame(data)
df['count'] = df['numbers'].count()
df['pct_positive'] = df.numbers[df.numbers > 0].count() / df['count']
print(df)
这是实际结果:
numbers count pct_positive
0 100 6 0.5
1 300 6 0.5
2 150 6 0.5
3 -150 6 0.5
4 -75 6 0.5
5 -100 6 0.5
这是我想要的结果:
numbers count pct_positive
0 100 1 1.0
1 300 2 1.0
2 150 3 1.0
3 -150 4 0.75
4 -75 5 0.66
5 -100 6 0.5
请注意如何在期望结果的每一行上计算'count'和'pct_positive',它们只是实际结果的总和。
答案 0 :(得分:1)
在这种情况下,'Count'
对于您的索引来说是多余的,因此您可以基于索引创建该列(或者只是坚持使用索引)。 .cumsum
布尔值Series
检查> 0
,得到除以'Count'
之后的百分比。
df['Count'] = df.index+1
df['pct_pos'] = df.numbers.gt(0).cumsum()/df.Count
numbers Count pct_pos
0 100 1 1.00
1 300 2 1.00
2 150 3 1.00
3 -150 4 0.75
4 -75 5 0.60
5 -100 6 0.50
也请避免命名列'count'
,因为这是一种方法。
答案 1 :(得分:1)
尝试:
df.numbers.gt(0).cumsum().div(df.numbers.notnull().cumsum())
输出:
0 1.00
1 1.00
2 1.00
3 0.75
4 0.60
5 0.50
Name: numbers, dtype: float64
详细信息: