Python 数据帧中的按字段分组
我有一个包含以下字段的数据框。对于每个Id,我有两条记录,它们代表不同的纬度和经度。我试图实现一个结果数据帧,它根据当前数据帧根据id进行分组,并将其纬度和经度放入不同的字段中 我尝试了按功能分组,但没有得到预期的结果。任何帮助都将不胜感激Python 数据帧中的按字段分组,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含以下字段的数据框。对于每个Id,我有两条记录,它们代表不同的纬度和经度。我试图实现一个结果数据帧,它根据当前数据帧根据id进行分组,并将其纬度和经度放入不同的字段中 我尝试了按功能分组,但没有得到预期的结果。任何帮助都将不胜感激 Id StartTime StopTime Latitude Longitude 101 14:42:28 14:47:56 53.51 118.12 101 22:10:01 22:12:49 33.3
Id StartTime StopTime Latitude Longitude
101 14:42:28 14:47:56 53.51 118.12
101 22:10:01 22:12:49 33.32 333.11
结果:
Id StartLat StartLong DestLat DestLong
101 53.51 118.12 33.32 333.11
您可以使用with apply函数将展平数据帧返回到系列:
df = df.groupby('Id')['Latitude','Longitude'].apply(lambda x: pd.Series(x.values.ravel()))
df.columns = ['StartLat', 'StartLong', 'DestLat', 'DestLong']
df = df.reset_index()
print (df)
Id StartLat StartLong DestLat DestLong
0 101 53.51 118.12 33.32 333.11
如果出现问题:
TypeError:Series.name必须是可哈希类型
尝试将系列
更改为数据帧
,但需要:
如果订购了这些功能,您可以对
groupby.agg
使用first
和last
功能:
df.groupby('Id').agg({'Latitude': {'StartLat': 'first', 'DestLat': 'last'},
'Longitude': {'StartLong': 'first', 'DestLong': 'last'}})
Latitude Longitude
StartLat DestLat StartLong DestLong
Id
101 53.51 33.32 118.12 333.11
如果需要,可以将其保存到数据帧并删除第一级列:
res = df.groupby('Id').agg({'Latitude': {'StartLat': 'first', 'DestLat': 'last'},
'Longitude': {'StartLong': 'first',
'DestLong': 'last'}})
res.columns = res.columns.droplevel(0)
res
Out:
StartLat DestLat StartLong DestLong
Id
101 53.51 33.32 118.12 333.11
我的数据帧有400000条记录。这个组员可以完美地录制100张唱片。对于超过100条记录本身,我得到错误“TypeError:Series.name必须是可哈希类型”。不确定为什么在数据帧中记录数增加时出现此错误?这些是否受到任何特定尺寸的限制?我也有这个问题,解决方法是,给我一分钟。
res = df.groupby('Id').agg({'Latitude': {'StartLat': 'first', 'DestLat': 'last'},
'Longitude': {'StartLong': 'first',
'DestLong': 'last'}})
res.columns = res.columns.droplevel(0)
res
Out:
StartLat DestLat StartLong DestLong
Id
101 53.51 33.32 118.12 333.11