使用pandas将列条目转为行 把Description列值设置为新列表头
解决方案
你的数据集是典型的长表转宽表场景,每3行连续数据对应同一个州的三个指标,按以下步骤实现即可:
首先在你现有代码的基础上添加如下逻辑:
# 为同一个州的3条数据分配相同的分组ID df['group_id'] = np.arange(len(df)) // 3 # 长表转宽表,将Description的取值转为列名,对应值取Data列的内容 res = df.pivot(index='group_id', columns='Description', values='Data') # 清理索引和列名,得到最终结果 res = res.reset_index(drop=True).rename(columns={'state': 'State'})
如果需要对指标列做数据类型转换方便后续计算,可以添加以下代码:
# 接种人数去掉千位逗号转整数 res['num people vaccinated'] = res['num people vaccinated'].str.replace(',', '').astype(int) # 接种比例转浮点型 res['percentage of population vaccinated'] = res['percentage of population vaccinated'].astype(float)
运行后得到的res就是你需要的结构,每行对应一个州,列分别为State、num people vaccinated、percentage of population vaccinated。你问题里提到的期望表头多了一个Data列属于表述误差,按你的原始数据结构转完后不需要额外的Data列,如果确实有特殊需求要保留原Data列可以自行调整pivot逻辑。
内容的提问来源于stack exchange,提问作者tarkan
相关产品推荐
相关产品推荐

