如何按列值重塑 pandas 数据框?

How to reshape pandas dataframe by column values?

我有一个包含纬度、经度、时间和数据值的列的数据框。我想重塑它并将其转换为 xarray 数据数组,这样维度是时间 x lat/long 对,但我不确定最有效的方法。

为了具体起见,数据框的结构如下:

Index   Latitude    Longitude   Time    Data
0       1           2           1       1
1       2           4           1       2
2       1           2           2       3

我希望对数据进行整形,使其最终成为矩阵:

          Latitude 1/Longitude 2    Latitude 2/Longitude 4
Time 1    1                         2
Time 2    3                         Null

我目前正在执行此操作,方法是对唯一的 lat/long 组合进行 for 循环,将每个组合保存为 xarray,然后将它们连接到 lat/long 维度。

有什么方法可以更有效地重塑数据吗?

数据透视表是你想要的,但首先你需要新的列名:

df['col'] = 'Latitude' + df['Latitude'].astype(str) + '/Longitude' + df.Longitude.astype(str)

df.pivot(index='Time', columns='col', values='Data')

输出:

col   Latitude1/Longitude2  Latitude2/Longitude4
Time                                            
1                      1.0                   2.0
2                      3.0                   NaN

这只是对列进行自定义的经典数据透视表 table。由于@QuangHoang 提供了 pivot 解决方案。这是 crosstab 解决方案,之后将多索引列展平

df1 = pd.crosstab(index=df.Time, columns=['Latitude '+df.Latitude.astype(str), 
                                          'Longitude '+df.Longitude.astype(str)], 
                                 values=df.Data, aggfunc='first')    

df1.columns = df1.columns.map('{0[0]}/{0[1]}'.format)

Out[382]:
      Latitude 1/Longitude 2  Latitude 2/Longitude 4
Time
1                        1.0                     2.0
2                        3.0                     NaN