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”是如何在期望结果中的每一行上计算的,并且只是实际结果中的总和。
发布于 2018-12-24 13:01:20
在这种情况下,'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',因为它是一种方法。
发布于 2018-12-24 13:08:11
尝试:
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详细信息:
https://stackoverflow.com/questions/53909270
复制相似问题