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
我有一个 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