Я хочу назначить новый столбец Pandas, найдя значение ключа, которое соответствует минимальной разнице между значением столбца (x) и любым значением другого столбца (y). Пример: ...

1
stuffbyax 5 Апр 2021 в 23:26

2 ответа

Лучший ответ

Вы можете попробовать это, никаких временных

df['result'] = df.apply(lambda row: df['key'][(df['y']-row['x']).abs().argmin()], axis=1)

Выход


   key  x   y   result
0   1   6   2   5
1   3   9   4   7
2   5   7   7   5
3   7   2   10  1
0
piterbarg 5 Апр 2021 в 21:13

Это немного сложнее, чем решение, которое вы думали использовать, но вы были на правильном пути.

Цикл по строкам казался лучшим решением, а затем нахождение разницы между x в каждой строке и всем столбцом y. Мы должны использовать abs(), чтобы нейтрализовать любые отрицательные значения, прежде чем мы сможем получить минимум. Затем получите индекс наименьшей разницы. Тогда мы легко сможем получить ключ, используя index. Сохраните это в списке и, наконец, создайте новый столбец.

results = []
for index, row in df.iterrows():

    # get the absolute value of the differences
    diffs = abs(row.x - df.y)
    
    # get the index of the minimum difference
    idxmin = diffs.idxmin()

    # get the value of key using the index
    key = df['key'][idxmin]

    results.append(key)

df['results'] = results

Мой вывод:

   key  x   y  results
0    1  6   2        5
1    3  9   4        7
2    5  7   7        5
3    7  2  10        1
0
dlever 5 Апр 2021 в 21:14