如何转换Pandas DataFrame,以国家为行索引、日期为列、A列为填充值
实现方法
你要实现的是长表转宽表的操作,Pandas里有专门的函数可以直接实现,不需要复杂的自定义逻辑,以下是两种常用可行方案:
方案1:使用pivot方法(数据无重复国家+日期组合时优先用)
如果原数据中不存在同一个国家同一日期对应多条记录的情况,直接调用pivot方法即可:
import pandas as pd # 假设你的原DataFrame名为df result_df = df.pivot(index='Country', columns='Date', values='A')
如果转换后不需要保留列名的轴标签,可以追加一步重置操作:
result_df = result_df.rename_axis(columns=None).reset_index()
方案2:使用pivot_table方法(存在重复国家+日期组合时用)
如果存在同一个国家同一日期有多条记录的情况,pivot会直接报错,这时用pivot_table指定重复值的聚合规则即可,比如重复时取A列的平均值:
result_df = df.pivot_table( index='Country', columns='Date', values='A', aggfunc='mean' # 也可以替换成sum、max等你需要的聚合逻辑 )
groupby未生效的原因
如果你想用groupby实现也可以,需要配合unstack操作:
result_df = df.groupby(['Country', 'Date'])['A'].mean().unstack(level='Date')
之前只做groupby没有后续的unstack操作的话,得到的还是分层索引的长表结构,自然不符合宽表的预期。
内容的提问来源于stack exchange,提问作者yodelin_bodelin
相关产品推荐
相关产品推荐

