создать список значений в столбце в пандах на основе значений другого столбца - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть датафрейм, содержащий 3 столбца. Я хочу получить значение в первом столбце, соответствующее последней записи во втором столбце, и значение в первом столбце, чьи связанные с ним значения во втором столбце имеют как минимум 8 различий с последней записью второго столбца, и поместить их в список. Поскольку 18 является ссылкой, я хочу иметь ассоциированное значение из col1 в списке и иметь кадр данных в выходных данных. Я пытаюсь понять, как я могу сделать это в пандах.

col1  col2   col3
 a      0      1
 b      2      1
 c      13     1
 d      18     1

вывод, который я хочу:

    col1   col3
 [d, b, a]  1

Спасибо заранее.

1 Ответ

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

Из того, как я интерпретировал ваш вопрос d не следует включать. Это с 18 - 18 = 0 < 8

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

# Get the desired reference value
last_entry = df.iloc[-1][col2]

# Select only rows whose difference is at least 8 
# Or the case where it is the last entry 
qry = "{ref}-col2 >= 8 or index=={idx}".format(ref=last_entry, idx=len(df)-1)
diff_gt_8 = df.query(qry) 

# For each value of col3 get a list of values of col1 and convert to DataFrame
pd.DataFrame( diff_gt_8.groupby(col3)[col1].apply(list) )

Для сравнения с вашим предыдущим значением:

df[(df[col2] - df[col2].shift(1)) < 12]

Обратите внимание, что df[col2].shift(1) возвращает серию со всеми строками, уменьшенными на 1. Таким образом, мы можем сравнить строку в df[col2] с предыдущей строкой. Первое значение никогда не будет включено, так как это NaN (не число).

UPDATE

Если я правильно понял ваш новый вопрос, это то, что вы хотите.

last_two_rows = df.iloc[-2:, :] # Select last two rows
if (last_two_rows.iloc[-1][col2] - last_two_rows.iloc[-2][col2]) < 12:
    last_two_rows[col1].iloc[-2] = np.nan
last_two_rows[[col1]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...