2014-01-22 81 views
0

我試圖複製DataFrame.idxmax()DataFrame.idxmin()的功能,但是我想使用自定義函數進行評估,而不是min或max。當條件評估爲真時,獲取熊貓DataFrame的列標籤

例如,在數據幀d:

+---+-----+-----+-----+ 
| | A | B | C | 
+---+-----+-----+-----+ 
| 0 | NaN | 100 | NaN | 
+---+-----+-----+-----+ 
| 1 | 100 | NaN | NaN | 
+---+-----+-----+-----+ 
| 2 | NaN | NaN | 200 | 
+---+-----+-----+-----+ 

只有一列將不會被包含整數零。我想返回一系列S(與指數i)當數等於100:

+---+---+ 
| 0 | B | 
+---+---+ 
| 1 | A | 
+---+---+  

我希望D.apply(lambda x: x[x==100].index,1)會工作,但事實並非如此。建議?

回答

0

如何:

df = pd.DataFrame({"A":[np.nan, np.nan, 100], "B":[np.nan, 100, np.nan], "C":[100, np.nan, np.nan]}) 
df.unstack().dropna() 

或:

df[df==100].unstack().dropna() 

如果你只需要索引:

df.unstack().dropna().reset_index().drop(0, axis=1) 
1
In [66]: df[df==100].stack() 
Out[66]: 
0 B 100 
1 A 100 
dtype: float64 
+0

感謝您的解決方案。但是因爲我只對multiIndex中的值感興趣,所以我在你的解決方案中添加了>> c = pandas.Series(df [df == 100] .stack()。index.get_level_values(1),index = df [DF == 100] .STACK()。index.get_level_values(0))'。如果你知道一個更簡單的方法來做到這一點,那就太棒了。 – kentwait