True值的行和列索引

时间:2014-12-05 18:35:13

标签: python numpy pandas

我有一个包含布尔值的NxN pandas DataFrame。例如:

In[56]: df
Out[56]: 
       15     25     35     45     55
10   True  False  False  False  False
20  False   True  False  False  False
30  False  False   True  False  False
40  False  False  False   True  False
50  False  False  False  False   True

我需要做的是将此帧折叠为Nx2 pandas DataFrame,其具有在交叉点处具有True的索引和列值作为记录值。例如:

In[62]: res
Out[62]: 
    0   1
0  10  15
1  20  25
2  30  35
3  40  45
4  50  55

似乎找不到一种简单的方法来做到这一点。

1 个答案:

答案 0 :(得分:3)

pd.melt从广泛到长格式“展开”DataFrame:

result = pd.melt(df.reset_index(), id_vars=['index'])
mask = result['value'] == True
result = result.loc[mask, ['index', 'variable']]
result.columns = [0, 1]
print(result)

产量

     0   1
0   10  15
6   20  25
12  30  35
18  40  45
24  50  55

PS。您所需的DataFrame有两列,其值为坐标。 df.pivot方法将具有类似坐标列的DataFrames转换为与原始DataFrame类似的“宽格式”DataFrame。如果您想采用其他方式,请使用pd.melt