Pandas 如何筛选? 条件为目标列的后值大于前值

发布于 2022-09-06 15:08:07 字数 156 浏览 10 评论 0

   A  B
0  1  1
1  1  2
2  1  3
3  1  4
4  1  3
5  1  6
6  1  7

需要根据B列筛选,条件为目标列的后值大于前值,把index=4的这行去掉。

请问该怎么写切片语句?谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

掩于岁月 2022-09-13 15:08:07

想了一种办法,增加一列C,用B列去第一位,增加最后一位
C列的值为:[2, 3, 4, 3, 6, 7, 7]
然后取C列大于等于B列的行,就是你要的值

import pandas as pd

df = pd.read_table('a.txt')
lst = list(df['B'])
df['C'] = lst[1:] + [lst[-1]]
print df[df['C'] >= df['B']]
心是晴朗的。 2022-09-13 15:08:07

df.drop(df.index[1:][df.B[1:]<df.B[:-1]])


需要根据B列筛选,条件为目标列的后值大于前值,把index=4的这行去掉

@zoujj

>>> import pandas as pd
>>> df = pd.DataFrame(list(range(1,8)),columns=['B'])
>>> df.B[4]=3
>>> df['A']=1
>>> df
   B  A
0  1  1
1  2  1
2  3  1
3  4  1
4  3  1
5  6  1
6  7  1
>>> df[(df.B[1:]<df.B[:-1])] # @zoujj 的方法是错的
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    df[(df.B[1:]<df.B[:-1])]
……
pandas.core.indexing.IndexingError: Unalignable boolean Series key provided
>>> df.drop(df.index[1:][df.B[1:]<df.B[:-1]])
   B  A
0  1  1
1  2  1
2  3  1
3  4  1
5  6  1
6  7  1
>>> 
初懵 2022-09-13 15:08:07

df[(df.B[1:]<df.B[:-1])]
百度这个教程讲得非常明白:https://jingyan.baidu.com/art...

七禾 2022-09-13 15:08:07
import pandas as pd
df = pd.DataFrame(list(range(1,8)),columns=['B'])
df.B[4]=3
df['A']=1
df[df["B"].shift(1).fillna(method="bfill")<df["B"]]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文