我有一个带有密集秩矩阵的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
答案 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