Выберите значение в одном столбце на основе вычитания значения в другом столбце - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть датафрейм, содержащий 4 столбца. Я хочу вычесть последнюю запись в col2 из второй в последнюю запись col2 и посмотреть, больше ли вычитание последней из второй в последнюю запись. Если это так, я хотел бы получить соответствующее значение для последней от второго до последнего в первом столбце и замените значение второго до последнего в первом столбце на NaN, а в качестве выходных данных создайте еще один кадр данных. Есть ли способ сделать это в пандах?

col1  col2   col3   col4
 e      21      1    2
 m      20      1    2
 k      9       1    2
 j      20      1    2

Выход:

col1         col3   col4
[j, 'NaN']    1      2

Я ищу способы, основанные на запросе, чтобы сделать вывод в формате фрейма данных проще с применением groupby или filtering.

Код, который я пробовал до сих пор, но это кажется, это не работает.

last = df.iloc[-1]['col2']
second_to_last = df.iloc[-2]['col2']

difference = df.query("{ref} - {ref_1} > 10".format(ref=last, ref_1= second_to_last))

Ошибка, которую я получаю в строке 3:

ValueError: multi-line expressions are only valid in the context of data

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать:

#get last and previous index values
last = df.index[-1]
second_to_last = df.index[-2]

#boolena mask - scalar
m1 = df.loc[last, 'col2'] - df.loc[second_to_last, 'col2'] > 10
#boolean mask - array
m2 = (df.index.isin([last, second_to_last]))
#chain together
m = m1 & m2
print (m)
[False False  True  True]

#filter
df1 = df[m]
print (df1)
  col1  col2  col3  col4
2    k     9     1     2
3    j    20     1     2

#get last row, remove unnecessary column
df2 = df1.iloc[[-1]].drop('col2', axis=1)
#convert value to lsit and add missing value
df2['col1'] = df2['col1'].apply(lambda x: list(x) + [np.nan])
print (df2)
       col1  col3  col4
3  [j, nan]     1     2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...