python – 在DataFrame中测试后续值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在DataFrame中测试后续值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1478字,纯文字阅读大概需要3分钟。
内容图文
![python – 在DataFrame中测试后续值](/upload/InfoBanner/zyjiaocheng/805/905685dfd27743ed9ac8eb0727ce733c.jpg)
我有一个DataFrame,其中一列有正负整数.对于每一行,我想看看有多少连续行(从当前行开始并包括当前行)具有负值.
因此,如果序列为2,-1,-3,1,-1,则结果为0,2,1,0,1.
我可以通过迭代所有索引,使用.iloc拆分列,然后使用next()找出下一个正值的位置.但我觉得这并没有利用熊猫的能力,我想有更好的方法.我已尝试使用.shift()和expanding_window但没有成功.
有没有更“宽容”的方法来找出当前一个符合某种逻辑条件后连续多少行?
这是现在正在运作的:
import pandas as pd
df = pd.DataFrame({"a": [2, -1, -3, -1, 1, 1, -1, 1, -1]})
df["b"] = 0
for i in df.index:
sub = df.iloc[i:].a.tolist()
df.b.iloc[i] = next((sub.index(n) for n in sub if n >= 0), 1)
编辑:我意识到,当最后有一个以上的负值时,即使我自己的例子也不起作用.这样就可以提供更好的解决方案.
编辑2:我用整数表示问题,但最初只在我的例子中加1和-1.我需要解决一般的正负整数.
解决方法:
FWIW,这是一个相当简洁的答案,不需要任何功能或适用.借用here(其他答案我很确定)并感谢@DSM提到了ascending = False选项:
df = pd.DataFrame({"a": [2, -1, -3, -1, 1, 1, -1, 1, -1, -2]})
df['pos'] = df.a > 0
df['grp'] = ( df['pos'] != df['pos'].shift()).cumsum()
dfg = df.groupby('grp')
df['c'] = np.where( df['a'] < 0, dfg.cumcount(ascending=False)+1, 0 )
a b pos grp c
0 2 0 True 1 0
1 -1 3 False 2 3
2 -3 2 False 2 2
3 -1 1 False 2 1
4 1 0 True 3 0
5 1 0 True 3 0
6 -1 1 False 4 1
7 1 0 True 5 0
8 -1 1 False 6 2
9 -2 1 False 6 1
我认为这个方法的一个好处是,一旦你设置’grp’变量,你可以使用标准的groupby方法很容易地做很多事情.
内容总结
以上是互联网集市为您收集整理的python – 在DataFrame中测试后续值全部内容,希望文章能够帮你解决python – 在DataFrame中测试后续值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。