如何将含SiteID的DataFrame转为单行?pivot后SiteID重复问题求解
解决思路:让SiteID在pivot后仅保留单行
直接修改pivot代码,指定
index='SiteID'作为行分组依据:
你之前的代码没指定index参数,导致pandas沿用原数据的行索引,每个原始行对应pivot后的一行,SiteID自然重复。加上index='SiteID'后,pandas会按SiteID聚合,每个SiteID只生成一行:df_hours = df.pivot(index='SiteID', columns='DayID', values='StartTime').reset_index()其中
reset_index()是把SiteID从索引列转回普通列,方便后续处理。若存在同一SiteID+DayID的重复数据,改用
pivot_table并指定聚合函数:
如果原始数据里同一个站点同一天有多个StartTime记录,pivot会报错,这时候用pivot_table配合聚合函数(比如取第一个值first、最大值max等)来合并:df_hours = df.pivot_table(index='SiteID', columns='DayID', values='StartTime', aggfunc='first').reset_index()针对已生成的重复SiteID结果,用groupby合并:
要是已经得到了SiteID重复的DataFrame,直接按SiteID分组后取每组的第一行(或符合业务逻辑的聚合方式)即可:df_hours_clean = df_hours.groupby('SiteID').first().reset_index()
内容的提问来源于stack exchange,提问作者bellotto
相关产品推荐
相关产品推荐

