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

   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的这行去掉。

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

阅读 10.1k
4 个回答

想了一种办法,增加一列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']]

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
>>> 
新手上路,请多包涵
新手上路,请多包涵
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"]]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏