要列出的类似网格的数据框
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
我有一个 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