2016-02-18 51 views
0

我有一個熊貓數據幀DF採摘行根據最小大熊貓柱

id  cons_id dist position 
AAA  AAA_1 -20  upstream 
AAA  AAA_2 -14  upstream 
AAA  AAA_3 -10  upstream 
AAA  AAA_4 20  downstream 
AAA  AAA_5 25  downstream 
AAA  AAA_6 30  downstream 
BBB  BBB_1 -30  upstream 
BBB  BBB_2 -24  upstream 
BBB  BBB_3 -7  upstream 
BBB  BBB_4 10  downstream 
BBB  BBB_5 35  downstream 
BBB  BBB_6 45  downstream 

我所要的輸出是這樣的,具有最大數目的行,以在「上游」類的每一個來選擇「 id「和」下游類別「(具有相同」id「)的第一行具有距所選上游行至少40的dist。輸出示例:

id  cons_id dist position 
AAA  AAA_3 -10  upstream 
AAA  AAA_6 30  downstream 
BBB  BBB_3 -7  upstream 
BBB  BBB_5 35  downstream 

我嘗試使用iterrows遍歷數據框並對數據框進行排序,找到最小錯誤。你能提出一個簡單的方法來做到這一點。

回答

0

我會通過選擇正確的數據幀的行,然後排序/分組的組合來解決這個問題。

df2 = df[df['dist'] <= 40] # filter out rows greater than 40 
df2.sort_values('dist').groupby(['id', 'position']).last().reset_index() 

reset_index()部分將刪除分組創建的多索引。 在這之後,行和列的順序也會有點混亂,因此您可能需要對列重新排序並使用數據框。

+0

我認爲這很接近,但「至少40分」的要求呢? – mhawke

+0

啊,我沒注意到。我會編輯 – Jezzamon