2017-10-04 134 views
0

我有此df數據幀:過濾數據幀的行根據最大列值

 artist    track class1 class2  class3 
0 Portishead    Roads 0.98 0.02   0.0 
1 Yo La Tengo  Our Way to Fall 0.14 0.86   0.0 
2 Radiohead Fake Plastic Trees 0.03 0.97   0.0 

給出的這些用戶輸入:

input_value = 0.8 
input_class = 'class2' 

我使用了根據數據幀中重新排序下面的代碼class2最大值:

for col in df.ix[:,'class1':'class3']: 
    if col == input_class: 
     reordered_df = df.iloc[(df[input_class] - input_value).argsort()] 

像這樣:

1 Yo La Tengo  Our Way to Fall 0.14 0.86   0.0 
2 Radiohead Fake Plastic Trees 0.03 0.97   0.0 
0 Portishead    Roads 0.98 0.02   0.0 

不過,我仍然需要滿足一類條件,即等級2的值必須是每個行中最高浮動值。換句話說:

0 Portishead    Roads 0.98 0.02   0.0 

應該放棄,因爲最大值屬於另一個類。

如何在上面的代碼片段中插入此條件?

+0

您的df和reorded_df沒有相同的值。請再看一遍。 –

回答

1

找到沿行的max行,比較class2,並相應地丟棄。

reordered_df 
     artist    track class1 class2 class3 
1 Yo La Tengo  Our Way to Fall 0.14 0.86  0.0 
2 Radiohead Fake Plastic Trees 0.03 0.97  0.0 
0 Portishead    Roads 0.98 0.02  0.0 

reordered_df[reordered_df.max(1) == reordered_df.class2] 
     artist    track class1 class2 class3 
1 Yo La Tengo  Our Way to Fall 0.14 0.86  0.0 
2 Radiohead Fake Plastic Trees 0.03 0.97  0.0 
+0

您能否使用上面的代碼片段來編輯您的解決方案?我需要保留兩個數據幀:'df'和'reordered_df' – outkast

+0

@outkast你不需要for循環。另請參閱編輯。 –