簡體   English   中英

根據最相似的列和索引標簽(與參考文獻相比)在 Pandas Dataframe 中查找特定單元格

[英]Finding specific cell inside Pandas Dataframe based on most similar column and index labels (when compared to references)

我有大約 500 列和 300 行的 dataframe,它看起來像下面的示例。 我需要根據最相似的列 label 和索引 label 將 select 特定的 dataframe 單元格與參考進行比較。

讓我解釋一下我的問題:假設我需要找到一個單元格,該單元格的列 label 與參考x=0.561697最相似,索引 label 與參考y=-0.12849最相似。 最有可能的是,在我的數據框的列和索引中沒有引用的標簽,但是有非常相似的標簽,這就是我想要找到的。 另一個問題是有時相似度最多為三位小數,有時最多為兩位小數。 理想的 output 應該是列和索引標簽與引用最相似的單元格(即它們在大多數十進制數字上共享相同的數字)。

我能以某種方式修改方法“loc”和“iloc”來搜索相似性而不是精確的標簽/值嗎? 還是有其他適合此目的的方法(甚至在大熊貓之外)? 謝謝你的建議。

#example of my dataframe
my_index=[[-0.176931, -0.15578987, -0.134648739]]
my_columns=[[0.447852, 0.568911395, 0.31997079, 0.451030185, 0.45208958]]
data=[[-6.027819824, -7.581473207, -9.277630354, -10.967289156, -12.490250252], [-13.749975397, -14.709719522, -15.317946078, -15.45502317, -14.990571819], [-13.922128986, -12.463674538, -10.987597885, -9.843527599, -9.179409063]]
df=pd.DataFrame(data)
df.columns=my_columns
df1=df.set_index(my_index)
df1

使用此示例,所需的 output 將只是值為“-12.463675”的單元格,列為 label“0.568911395”,索引為 label“-0.134648739”

DataFrame df1 :

            0.447852   0.568911   0.319971   0.451030   0.452090
-0.176931  -6.027820  -7.581473  -9.277630 -10.967289 -12.490250
-0.155790 -13.749975 -14.709720 -15.317946 -15.455023 -14.990572
-0.134649 -13.922129 -12.463675 -10.987598  -9.843528  -9.179409

假設您將列的索引固定為一維:

df1.columns = my_columns[0]
# Float64Index([0.447852, 0.568911395, 0.31997079, 0.451030185, 0.45208958], dtype='float64')

您可以使用目標的最小絕對差:

import numpy as np

out = df1.iloc[np.argmin(abs(df1.index-y)), np.argmin(abs(df1.columns-x))]

output: -12.463674538

中間的:

np.argmin(abs(df1.index-y)), np.argmin(abs(df1.columns-x))

output: (2, 1)

坐標:

y_pos = np.argmin(abs(df1.index-y))
x_pos = np.argmin(abs(df1.columns-x))
df1.index[y_pos], df1.columns[x_pos]

output: (-0.134648739, 0.568911395)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM