如何无需函数简化DataFrame三列重复值统计与合并代码?
可行,具体实现如下
假设你的原始DataFrame为df,可以通过以下一段代码完成需求:
import pandas as pd # 合并三列的统计、补全缺失值并最终合并结果 result = ( # 将A、B、C列转为长格式,统一处理 df.melt(value_vars=['A', 'B', 'C'], var_name='col', value_name='val') # 统计每列各值的出现次数 .groupby(['col', 'val']) .size() .reset_index(name='count') # 生成0到三列最大值的完整索引区间 .set_index(['col', 'val']) .reindex( pd.MultiIndex.from_product( [['A', 'B', 'C'], range(0, df[['A', 'B', 'C']].max().max() + 1)], names=['col', 'val'] ) ) # 缺失值填充为0 .fillna(0) .astype(int) # 转回宽格式得到最终结果 .unstack('col') .droplevel(0, axis=1) .reset_index() )
核心逻辑说明:
- 用
melt将A、B、C列转为长表结构,把三列的处理逻辑统一,避免重复编写多段代码 - 通过
groupby+size一次性完成三列各值的重复次数统计 - 利用
pd.MultiIndex.from_product生成包含所有目标列、0到三列最大值区间的完整索引,通过reindex补全缺失值 - 最后将长表转回宽表结构,得到和你之前四段代码等价的合并结果
内容的提问来源于stack exchange,提问作者Patrick Parts
相关产品推荐
相关产品推荐

