[英]How to select rows of dataframe based on index then on condition?
我正在對肺結節圖像執行斑點檢測例程。 對於每個圖像,斑點檢測器將返回檢測到的斑點及其坐標和半徑的數組。 然后,我檢查地面真相肺結節坐標是否在任何斑點內,並返回true或false(這將成為該過程下一階段的訓練標簽)。
我遇到的問題是,對於某些圖像,結節位於一個以上的斑點內,因此圖像具有兩個(或多個)真正的陽性檢測結果,而不是一個。 因此,對於這些情況,我想找到最接近地面實況的斑點並將該單一斑點標記為真正的陽性。
但是,我正在努力以這種方式對數據幀進行切片,以便僅比較每個圖像的陽性檢測。 我的數據框是這樣的:
Blob_Y Blob_X Blob_R True_X True_Y Label
JPCLN001.npy 0 840.0 220.0 16.970563 817.0 346.0 0
1 832.0 496.0 16.970563 817.0 346.0 0
2 496.0 872.0 69.767869 805.0 483.5 1
3 480.0 796.0 16.970563 805.0 483.5 1
4 820.0 888.0 56.568542 817.0 346.0 0
JPCLN002.npy 5 840.0 220.0 16.970563 817.0 346.0 0
6 832.0 496.0 16.970563 817.0 346.0 1
7 824.0 256.0 30.169889 817.0 346.0 0
8 824.0 172.0 16.970563 817.0 346.0 0
9 820.0 888.0 56.568542 817.0 346.0 0
對於圖像JPCLN001.npy
我想選擇標簽等於1的行,然后為第2行和第3行從(True_X, True_Y)
和(Blob_X, Blob_Y)
計算勾股距離。需要分配最接近真實坐標的Blob標記為1且另一個標記為假陽性並標記為0。
數據框中有四個圖像需要執行此操作。
我嘗試通過為每個圖像選擇相關行並將它們分配給新的數據幀,進行距離計算然后將這些行重新插入到原始數據幀中來進行操作,如下所示:
df = blobs.loc['JPCLN061.npy']
df = df[df['Label'] == 1]
df = df.assign(dist = np.sqrt((df['Blob_X']-df['True_X'])**2 + (df['Blob_Y']-df['True_Y'])**2))
df['Label'][df['dist'] == df['dist'].max()] = 0
df.drop(['dist'], inplace = True, axis = 1)
blobs.update(df)
blobs.update(df)
不會更新原始數據幀(我認為是由於每個數據幀的索引之間不匹配)。 我的方法似乎也很麻煩,因此,如果有人可以幫助我做到這一點,那將是非常感謝,因為我整天都在努力!
作為一個快速的示例,如何:
df = blobs.loc['JPCLN061.npy']
df = df[df['Label'] == 1]
df = df.assign(dist = np.sqrt((df['Blob_X']-df['True_X'])**2 + (df['Blob_Y']-
df['True_Y'])**2))
df = df.sort_values('dist', ascending=False)
blobs.loc[('JPCLN061.npy', df.index[0]), 'Label'] = 0
如果您發布代碼來創建df,我們很樂意以更有效的方式幫助您!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.