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

如何在Python中从DataFrame格式的列联表重构DataFrame?

从列联表重构DataFrame的方法

生成df1(行列+频率的三列格式)

完全不用写循环,用Pandas的stack()方法就能快速实现:

import pandas as pd
ctab = pd.DataFrame([[1,2], [2, 1]], columns=["A", "B"], index=["A", "B"])

# 生成目标df1
df1 = ctab.stack().reset_index(name='freq')
df1.columns = ['col', 'index', 'freq']
print(df1)

运行后输出的结果和你定义的df1完全一致,stack()会自动把列联表的行索引、列名和对应数值展开,再通过reset_index()把索引转成列,最后重命名列即可。

生成df2(按频率重复行列组合)

同样不需要循环,基于df1的结果用repeat()方法就能实现:

# 生成目标df2
df2 = df1.loc[df1.index.repeat(df1['freq']), ['col', 'index']].reset_index(drop=True)
print(df2)

这里通过df1.index.repeat(df1['freq'])生成与频率匹配的重复索引,提取对应行的col和index列后,重置索引就得到了目标格式。

如果想一步到位不依赖df1,也可以直接操作堆叠后的结果:

# 一步生成df2
stacked_ctab = ctab.stack()
df2 = pd.DataFrame({
    'col': stacked_ctab.index.get_level_values(0).repeat(stacked_ctab.values),
    'index': stacked_ctab.index.get_level_values(1).repeat(stacked_ctab.values)
}).reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:03:12