要列出的类似网格的数据框

Grid-like dataframe to list

我有一个 excel 数据集,其中包含 100 行和 100 列,其顺序频率位于 x 和 y 描述的位置。(网格状结构)

我想将其转换为以下包含 3 列的结构:

x-Coördinaten | y-Coördinaten | value

“值”列仅包含正整数。 x 和 y 列包含浮点型数据(地理坐标。 顺序无关紧要,以后很容易排序。

所以,基本上可以合并列表,例如:

[[1,5,3,5], [4,2,5,6], [2,3,1,5]] ==> [1,5,3,5,4,2,5,6,2,3,1,5]

但那样我就失去了位置...这是我项目的关键。

完成此任务的最佳方法是什么?

假设输入:

l = [[1,5,3,5],[4,2,5,6],[2,3,1,5]]
df = pd.DataFrame(l)

你可以使用 stack:

df2 = df.rename_axis(index='x', columns='y').stack().reset_index(name='value')

输出:

    x  y  value
0   0  0      1
1   0  1      5
2   0  2      3
3   0  3      5
4   1  0      4
5   1  1      2
6   1  2      5
7   1  3      6
8   2  0      2
9   2  1      3
10  2  2      1
11  2  3      5

melt不同的顺序:

df2 = df.rename_axis('x').reset_index().melt('x', var_name='y', value_name='value')

输出:

    x  y  value
0   0  0      1
1   1  0      4
2   2  0      2
3   0  1      5
4   1  1      2
5   2  1      3
6   0  2      3
7   1  2      5
8   2  2      1
9   0  3      5
10  1  3      6
11  2  3      5

您应该能够通过 melt 操作获得结果 -

df = pd.DataFrame(np.arange(9).reshape(3, 3))
df.columns = [2, 3, 4] 
df.loc[:, 'x'] = [3, 4, 5] 

这就是 df 的样子

   2  3  4  x
0  0  1  2  3
1  3  4  5  4
2  6  7  8  5

融化操作-

df.melt(id_vars='x', var_name='y')

输出-

   x  y  value
0  3  2      0
1  4  2      3
2  5  2      6
3  3  3      1
4  4  3      4
5  5  3      7
6  3  4      2
7  4  4      5
8  5  4      8