You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas基于两列创建新列并实现聚合结果

Pandas原生实现行列转换方案

核心方法:使用pivot进行数据重塑

你的需求本质是将行级的厂商数据转换为列级,Pandas的pivot方法是原生且高效的解决方案,完全不需要转字典处理。

步骤1:执行pivot转换

首先通过pivot将Car Maker的不同取值转为列,City作为分组依据,Qty作为对应值:

import pandas as pd

df = pd.DataFrame({'City':['Los Angeles', 'Denver','Denver','Los Angeles'], 
    'Car Maker': ['Ford','Toyota','Ford','Toyota'],
    'Qty': [50000,100000,80000,70000]})

# 执行pivot,将厂商转为列
pivoted = df.pivot(index='City', columns='Car Maker', values='Qty').reset_index()

此时得到的结果已经实现了核心需求:每个城市一行,Ford和Toyota列对应各自的Qty:

CityFordToyota
0Denver80000100000
1Los Angeles5000070000

步骤2:添加Car Maker列(按需)

你的目标表格中保留了Car Maker列,但每个城市对应两个厂商,这里我们取每个城市首次出现的厂商值(和你给出的目标一致):

# 提取每个城市的首个厂商
car_maker_series = df.groupby('City')['Car Maker'].first().reset_index(name='Car Maker')
# 合并到pivot结果中
result = pd.merge(pivoted, car_maker_series, on='City')
# 调整列顺序匹配目标表格
result = result[['City', 'Car Maker', 'Ford', 'Toyota']]

最终得到的result就是你想要的目标表格:

CityCar MakerFordToyota
0DenverToyota80000100000
1Los AngelesFord5000070000

补充说明

  • 如果你的数据中存在同一城市+同一厂商的多条记录,可以改用pivot_table并指定聚合函数(比如sum):
    pd.pivot_table(df, index='City', columns='Car Maker', values='Qty', aggfunc='sum').reset_index()
    
  • 目标中的Car Maker列实际意义有限(每个城市对应多个厂商),如果不需要可以直接省略步骤2。

内容的提问来源于stack exchange,提问作者Andre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:20:24