当条件评估为True时,在pandas中获取DataFrame的列标签

时间:2014-01-22 10:47:15

标签: python indexing pandas dataframe

我正在尝试复制DataFrame.idxmax()DataFrame.idxmin()的功能,但我想使用自定义函数进行评估,而不是min或max。

例如在DataFrame D中:

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

只有一列不会为包含整数的null。当数字等于100时,我想返回一个S系列(带索引i):

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

我希望D.apply(lambda x: x[x==100].index,1)可以工作,但事实并非如此。建议?

2 个答案:

答案 0 :(得分:1)

In [66]: df[df==100].stack()
Out[66]: 
0  B    100
1  A    100
dtype: float64

答案 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)