[英]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.