如何按列值重塑 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
我有一个包含纬度、经度、时间和数据值的列的数据框。我想重塑它并将其转换为 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