从pandas密集排名数据框中选择一个特定值

时间:2015-09-05 00:33:29

标签: pandas transform dense-rank

我有一个带有密集秩矩阵的pandas数据帧,想要选择所有具有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

1 个答案:

答案 0 :(得分:1)

这是一种方法。

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