我可以返回最后一个有效项目的索引,但是我希望使用相同的方法对df进行子集化。例如,以下代码返回2出现在df中的最后时间。但是我想使用该索引返回df。
import pandas as pd
df = pd.DataFrame({
'Number' : [2,3,2,4,2,1],
'Code' : ['x','a','b','c','f','y'],
})
df_last = df[df['Number'] == 2].last_valid_index()
print(df_last)
4
预期输出:
Number Code
0 2 x
1 3 a
2 2 b
3 4 c
4 2 f
答案 0 :(得分:2)
您可以使用loc
,但是解决方案仅在列中至少有一个值2
时有效:
df = df.loc[:df[df['Number'] == 2].last_valid_index()]
print (df)
Number Code
0 2 x
1 3 a
2 2 b
3 4 c
4 2 f
一般解决方案应该是:
df = df[(df['Number'] == 2)[::-1].cumsum().ne(0)[::-1]]
print (df)
Number Code
0 2 x
1 3 a
2 2 b
3 4 c
4 2 f