Saya mencari untuk menetapkan kolom baru ke panda dengan menemukan nilai kunci yang sesuai dengan perbedaan minimum antara nilai kolom (X) dan nilai apa pun dari kolom lain (Y). Contoh: ...

1
stuffbyax 5 April 2021, 23:26

2 jawaban

Jawaban Terbaik

Anda dapat mencoba ini, tidak ada sementara

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

Keluaran


   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 April 2021, 21:13

Ada sedikit lebih banyak yang terlibat daripada solusi yang Anda pikirkan, tetapi Anda berada di jalur yang benar.

Perulangan melalui baris tampak seperti solusi terbaik, dan kemudian menemukan perbedaan antara X pada setiap baris dan seluruh kolom Y. Kita harus menggunakan abs() untuk menetralkan nilai negatif apa pun sebelum kita mendapatkan minimum. Kemudian, dapatkan indeks perbedaan terendah. Maka kita dapat dengan mudah mendapatkan kunci menggunakan indeks. Simpan ini dalam daftar dan akhirnya buat kolom baru.

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

Output saya:

   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 April 2021, 21:14