首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅计算Pandas数据序列中的当前行和前一行

问仅计算Pandas数据序列中的当前行和前一行
EN

Stack Overflow用户
提问于 2018-12-24 12:49:40
回答 2查看 32关注 0票数 1

python新手。我确信有一个非常简单的解决方案,但我正在努力寻找它。

我有一系列的正负数字。我想知道正数的百分比是多少。我已经完成了整个数据集的计算,但我希望在每一行上都进行计算。

我正在处理的数据集非常大,但这里有一个示例:

代码语言:javascript
复制
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)

实际结果如下:

代码语言:javascript
复制
   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

这是我想要的结果:

代码语言:javascript
复制
   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”是如何在期望结果中的每一行上计算的,并且只是实际结果中的总和。

EN

回答 2

Stack Overflow用户

发布于 2018-12-24 13:01:20

在这种情况下,'Count'对于您的索引是多余的,因此您可以基于索引创建该列(或者只使用索引)。.cumsum一个布尔Series检查> 0,以获得除以'Count'后的正百分比。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-12-24 13:08:11

尝试:

代码语言:javascript
复制
df.numbers.gt(0).cumsum().div(df.numbers.notnull().cumsum())

输出:

代码语言:javascript
复制
0    1.00
1    1.00
2    1.00
3    0.75
4    0.60
5    0.50
Name: numbers, dtype: float64

详细信息:

  • Get sign of df.number检查正数是否大于0,然后对该列求和。
  • 使用notnull对数字进行计数,以更改为布尔和累加。
  • 将正数除以总计数。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53909270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档