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

Pandas按两列分组,将指定列值转为新列并填充数据

解决方案

可以通过Pandas的透视表功能实现需求,以下是两种简洁的实现方式:

方法1:使用pivot快速转换

import pandas as pd
a = [[0, 4, 'a', 1], [0, 4, 'b', 1], [0, 2, 'a', 0.5], [0, 2, 'b', -1], [0, 2, 'c', 1]]
df = pd.DataFrame(a, columns=['x', 'y', 'features', 'values'])

# 执行透视转换:x、y作为行索引,features转为列,values填充对应位置
df2 = df.pivot(index=['x', 'y'], columns='features', values='values').reset_index()
# 填充缺失值为0,移除列名的层级标签
df2 = df2.fillna(0).rename_axis(None, axis=1)

print(df2)

输出结果:

x  y    a  b  c
0  0  4  1.0  1  0
1  0  2  0.5 -1  1

方法2:显式使用groupby + unstack

如果需要明确通过groupby操作实现,可采用以下写法:

import pandas as pd
a = [[0, 4, 'a', 1], [0, 4, 'b', 1], [0, 2, 'a', 0.5], [0, 2, 'b', -1], [0, 2, 'c', 1]]
df = pd.DataFrame(a, columns=['x', 'y', 'features', 'values'])

# 按x、y、features分组取值,再将features列展开为表头
df2 = df.groupby(['x', 'y', 'features'])['values'].sum().unstack(fill_value=0).reset_index()
# 移除列名层级标签
df2 = df2.rename_axis(None, axis=1)

print(df2)

关键说明

  • pivot是Pandas专为长表转宽表场景设计的方法,参数对应关系清晰,转换效率高
  • 转换后缺失的features值(如(0,4)组合没有'c')会生成空值,通过fillna(0)统一填充为0
  • reset_index()将原索引列(x,y)转回普通数据列,rename_axis(None, axis=1)移除自动生成的列层级标签,让结果与目标格式完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:20:33