Как извлечь значение столбца на основе изменения значения в другом столбце python - PullRequest
1 голос
/ 12 июня 2019

У меня есть фрейм данных с двумя столбцами, я хочу извлечь значение первого столбца на основе второго столбца, если в последних 3 строках столбца 2 значение изменяется с 0 на любое значение, то извлекается значение столбца 1.

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 голосов
/ 12 июня 2019

Я считаю, что вам нужно проверить разницу с последними значениями до первых в последних 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...