如何通过列值重塑熊猫数据框?

时间:2019-10-10 17:20:53

标签: python pandas python-xarray

我有一个数据框,其中的列包括纬度,经度,时间和数据值。我想重塑形状并将其转换为xarray数据数组,以使维度为时间x纬度/长对,但不确定执行此操作的最有效方法。

具体来说,数据框的结构如下:

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

我目前正在通过在唯一的经/纬度组合上进行for循环,将每个另存为xarray,然后在经/纬度维度上将它们串联来实现此目的。

有什么方法可以提高数据重塑的效率?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

这只是经典的数据透视表,在列上进行了自定义。 @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