【问题标题】:How can I rearrange a Pandas DataFrame containing a list of coordinates into a table?如何将包含坐标列表的 Pandas DataFrame 重新排列到表格中?
【发布时间】:2021-01-09 02:58:19
【问题描述】:

我在表格中有一个坐标列表

X Y Z
X1 Y1 Z (X1,Y1)
X1 Y2 Z (X1,Y2)
... ... ...
X1 YN Z (X1,YN)
X2 Y1 Z (X2,Y1)
X2 Y2 Z (X2,Y1)
... ... ...
XN YN Z (XN,YN)

我需要这样做,因为 Z 的功能很挑剔。

Matplot lib 需要 Z 值是一个二维数组。我想重新排列表格,以便:

Y1 Y2 ... YN
X1 X(X1,Y1) Z(X1, Y2) ... Z(X1, YN)
X2 Z(X2, Y1) Z(X2, Y2) ... Z(X2, YN)
... ... ... ... ...
XN Z(XN, Y1) Z(XN, Y2) ... Z(XN, YN)

我在 Pandas 中尝试了一些枢轴选项,但没有运气。遍历表被证明是不可靠的。

我迷路了,请帮忙。

编辑: `plotable_table = table.pivot(index = 'X', columns = 'Y', values = 'Z') 返回一些奇怪的东西。不幸的是 table 是 3 x 230 而 plotable_table 是 23 x 142.... 它应该是 23 x 10

表格是:

         X         Y        Z
0     10000       0.0      0.0
1     10000    1000.0   -200.6
2     10000    2000.0   -401.2
3     10000    3000.0   -601.8
4     10000    4000.0   -802.4
..      ...       ...      ...
225  230000  115000.0  -9050.5
226  230000  138000.0 -26726.0
227  230000  161000.0 -56028.0
228  230000  184000.0 -66562.0
229  230000  207000.0 -77096.0
    [230 rows x 3 columns]

可绘制的表格是:

Y       0.0       1000.0    2000.0    ...  189000.0  198000.0  207000.0
X                                     ...
10000        0.0    -200.6    -401.2  ...       NaN       NaN       NaN    
20000        0.0       NaN    -401.2  ...       NaN       NaN       NaN    
30000        0.0       NaN       NaN  ...       NaN       NaN       NaN    
40000        0.0       NaN       NaN  ...       NaN       NaN       NaN    
50000     4070.0       NaN       NaN  ...       NaN       NaN       NaN    
60000     4884.0       NaN       NaN  ...       NaN       NaN       NaN    
70000     5698.0       NaN       NaN  ...       NaN       NaN       NaN    
80000     6512.0       NaN       NaN  ...       NaN       NaN       NaN    
90000     9846.0       NaN       NaN  ...       NaN       NaN       NaN    
100000   18230.0       NaN       NaN  ...       NaN       NaN       NaN    
110000   20053.0       NaN       NaN  ...       NaN       NaN       NaN    
120000   24768.0       NaN       NaN  ...       NaN       NaN       NaN    
130000   26832.0       NaN       NaN  ...       NaN       NaN       NaN    
140000   28896.0       NaN       NaN  ...       NaN       NaN       NaN    
150000   30960.0       NaN       NaN  ...       NaN       NaN       NaN    
160000   41184.0       NaN       NaN  ...       NaN       NaN       NaN    
170000   43758.0       NaN       NaN  ...       NaN       NaN       NaN    
180000   46332.0       NaN       NaN  ...       NaN       NaN       NaN    
190000   48906.0       NaN       NaN  ...       NaN       NaN       NaN    
200000   51480.0       NaN       NaN  ...       NaN       NaN       NaN    
210000   54054.0       NaN       NaN  ...  -86562.0       NaN       NaN    
220000   73568.0       NaN       NaN  ...       NaN  -73744.0       NaN    
230000   76912.0       NaN       NaN  ...       NaN       NaN  -77096.0 

[23 rows x 142 columns]

【问题讨论】:

  • 第一张桌子很混乱。
  • 我不理解您在所需输出中的模式。除了 Y1 列中的 X(X1,Y1) 之外,这一切似乎都是 z 的函数。这与其余数据的匹配度如何。
  • 我假设您正在寻找df.pivot(index='X', columns='Y', values='Z')
  • 试试df.pivot(index='foo', columns='bar', values='Z')
  • @FLAV10 你应该使用 Chris 提供的 sintax,而不是像你展示的那样使用整数

标签: python pandas dataframe


【解决方案1】:

答案是:

data = data.pivot(index='X', columns='Y', values='Z')

数据透视表的维度取决于 X 和 Y 的唯一值。您应该计算 Y 有多少不同的值。

【讨论】:

  • 我认为你是对的。 Y 值只是 X 的百分比。给我一点时间调查!感谢您让我走上正确的道路:)
  • @FLAV10 没问题。尝试四舍五入 0 - 2 位小数。
猜你喜欢
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 2020-08-02
  • 2022-10-13
相关资源
最近更新 更多