Pandas DataFrame如何按model匹配将item_price值分配到对应列
实现方案
你要的效果本质是DataFrame的行转列操作,pandas内置方法即可实现,分两种场景选择对应代码:
场景1:同一个品牌+同一个model对应唯一item_price
直接使用pivot方法:
import pandas as pd # 以品牌为行维度,model为列维度,用item_price填充对应位置 result_df = temp.pivot(index='品牌', columns='model', values='item_price').reset_index() # 清除自动生成的列名前缀 result_df.columns.name = None # 重置索引保持格式整齐 result_df = result_df.reset_index(drop=True)
场景2:同一个品牌+同一个model对应多个item_price
使用支持聚合逻辑的pivot_table方法,可自定义多价格的处理规则:
import pandas as pd import numpy as np result_df = temp.pivot_table( index='品牌', columns='model', values='item_price', # 多价格聚合规则:list=保留所有价格为列表,sum=求和,np.mean=求均值,'first'=取第一个值 aggfunc=list, # 无对应价格的位置填充值,按需修改,比如填0、空字符串等 fill_value=np.nan ).reset_index() result_df.columns.name = None result_df = result_df.reset_index(drop=True)
效果验证示例
假设你的temp结构如下:
| 品牌 | model | item_price |
|---|---|---|
| 小米 | 13 | 3999 |
| 小米 | 13 Pro | 4999 |
| 小米 | 13 | 3699 |
使用场景2的代码(aggfunc设为list)后,输出结果为:
| 品牌 | 13 | 13 Pro |
|---|---|---|
| 小米 | [3999,3699] | 4999 |
内容的提问来源于stack exchange,提问作者Homayoun Soleimani
相关产品推荐
相关产品推荐

