Select 来自 pandas 密集排名数据框的某个值

Select a certain value from a pandas dense rank dataframe

我有一个 pandas 具有密集秩矩阵的数据框,并且想要 select 所有具有 2 的单元格。然后将其转换为结果数据框,如下所示。我仅使用 for 循环遍历每一列和每一行,但有更好的方法吗?

df 看起来像

    A   B   C  ........ x 2000 columns 
AA  1   3   2
BB  2   1   3
CC  2   2   1
 .
 .
 .
 x
2000 rows

results_df 像

    Col1  Col2
0   A     BB
1   A     CC
2   B     CC
3   C     AA

这是一种方法。

rows, cols = np.nonzero((df==2).values)

results_df = pandas.DataFrame({
    'Col1':[df.columns[c] for c in cols], 
    'Col2':[df.index[r] for r in rows]
}).sort('Col1').reset_index(drop=True)

例如:

In [88]: df
Out[88]: 
    A  B  C
AA  1  3  2
BB  2  1  3
CC  2  2  1

In [89]: pandas.DataFrame({'Col1':[df.columns[c] for c in cols], 'Col2':[df.index[r] for r in rows]}).sort('Col1').reset_index(drop=True)
Out[89]: 
  Col1 Col2
0    A   BB
1    A   CC
2    B   CC
3    C   AA