1

密なランク行列を持つ 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
4

1 に答える 1

1

ここに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
于 2015-09-05T01:52:01.977 に答える