我有一个包含布尔值的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
似乎找不到一种简单的方法来做到这一点。
答案 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
。