Pandas中处理两个DataFrame:为单ISBN行DF添加分类计数列
解决方法:通过数据透视+合并实现需求
你的问题出在直接比较两个DataFrame的ISBN列时,因为x是多行对应同一个ISBN,而y是单行对应一个ISBN,这种直接的布尔匹配会因为索引和长度不匹配导致对齐错误,赋值自然无法得到正确结果。
推荐用数据透视+合并的方式来实现,步骤清晰且不易出错:
步骤1:对x进行数据透视,将分类转为列
先把x中同一ISBN的不同分类计数整理成宽表格式,每个ISBN对应一行,分类作为列:
import pandas as pd # 用pivot_table处理,fill_value=0确保没有对应分类时计数为0 x_pivot = x.pivot_table( index='ISBN', columns='Age Category', values='Count', fill_value=0 ).reset_index() # 重命名列名,符合你想要的格式 x_pivot.columns = ['ISBN', 'Middle Adult Count', 'Young Adult Count']
对于你给出的x数据,透视后会得到:
| ISBN | Middle Adult Count | Young Adult Count |
|---|---|---|
| 000649840X | 6 | 16 |
步骤2:将透视后的表与y合并
把处理好的计数列合并到y中,用ISBN作为匹配键:
# 用left join确保y中所有ISBN都保留,即使x中没有对应分类(此时计数为0) y = y.merge(x_pivot, on='ISBN', how='left')
这样就能得到你想要的最终格式:每个ISBN一行,同时带有Middle Adult Count和Young Adult Count两列。
如果后续有更多年龄分类,这个方法也能自动适配,不需要修改代码逻辑,非常灵活。
内容的提问来源于stack exchange,提问作者Omar Amr
相关产品推荐
相关产品推荐

