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

在pandas中将长表重塑为值为True/False的宽表的实现方法

Python实现长表转布尔值宽表方案

你用unstack没得到正确结果的核心原因是缺少辅助值列,且没有对unstack后的缺失值做填充,以下是两种可直接运行的实现方式:

方法1:使用crosstab(最简写法)

直接用pandas.crosstab生成计数交叉表后转布尔类型即可:

import pandas as pd
from io import StringIO

data_from_csv = 'x,y\na,d1\na,d2\nb,d1\nb,d3\n'
# 读取原始数据
df = pd.read_csv(StringIO(data_from_csv))

# 转换逻辑
res = pd.crosstab(df['x'], df['y']).astype(bool).reset_index()
res = res.rename(columns={'x': 'thing'})

# 输出验证
print(res.to_csv(index=False))

运行后输出和要求的data_to_csv完全一致。

方法2:使用set_index + unstack(符合你原本的思路)

先添加固定为True的辅助列,再做堆叠转换,缺失值填充为False即可:

import pandas as pd
from io import StringIO

data_from_csv = 'x,y\na,d1\na,d2\nb,d1\nb,d3\n'
df = pd.read_csv(StringIO(data_from_csv))

# 转换逻辑
df['value'] = True
res = df.set_index(['x', 'y'])['value'].unstack(fill_value=False).reset_index()
res = res.rename(columns={'x': 'thing'})

# 输出验证
print(res.to_csv(index=False))

两种方法输出结果完全相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:06:03