如何基于其他列python中的值更改提取列的值

时间:2019-06-12 06:07:20

标签: python-3.x pandas numpy

我有两列的数据框,我想根据第二列提取第一列的值,如果第二列的最后3行中值从0更改为任何值,则提取第一列的值。

df=pd.DataFrame({'column1':[1,5,6,7,8,11,12,14,18,20],'column2':[0,0,1,1,0,0,0,256,256,0]})
print(df)
   column1  column2
0        1        0
1        5        0
2        6        1
3        7        1
4        8        0
5       11        0
6       12        0
7       14      256
8       18      256
9       20        0

out_put=pd.DataFrame({'column1':[20],'column2':[0]})

print(out_put)
   column1  column2
0       20        0

1 个答案:

答案 0 :(得分:0)

我相信您需要将第二列的最后3个值中的最后一个值与第一个值进行比较:

df1 = df.tail(3)
df2 = df1[df1['column2'].eq(0).view('i1').diff().eq(1)]

print (df2)
   column1  column2
9       20        0

详细信息

#last 3 rows
print (df1)
   column1  column2
7       14      256
8       18      256
9       20        0

#compare second colum for equality
print (df1['column2'].eq(0))
7    False
8    False
9     True
Name: column2, dtype: bool

#convert mask to integers
print (df1['column2'].eq(0).view('i1'))
7    0
8    0
9    1
Name: column2, dtype: int8

#get difference
print (df1['column2'].eq(0).view('i1').diff())
Name: column2, dtype: int8
7    NaN
8    0.0
9    1.0
Name: column2, dtype: float64

#compare by 1
print (df1['column2'].eq(0).view('i1').diff().eq(1))
7    False
8    False
9     True
Name: column2, dtype: bool

最后用boolean indexing进行过滤。