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

如何为pandas DataFrame中完全相同的列分配相同分数并生成对应新列?

解决方案

核心思路

先识别所有完全相同的列,为每组相同列分配唯一分数,再为每个原列生成对应分数列(整列值统一为该列的分数)。

代码实现

import pandas as pd
import numpy as np

# 构造测试DataFrame(模拟24行的场景)
data = {
    'A': [1]*24,
    'B': [2]*24,
    'C': [1]*24,
    'D': np.arange(24),
    'F': [1]*24,
    'Z': [2]*24
}
df = pd.DataFrame(data)

# 1. 将每列转换为元组(可哈希对象,用于判断列是否完全相同)
column_signatures = df.apply(tuple, axis=0)

# 2. 为相同签名的列分配连续分数(从1开始)
scores, _ = pd.factorize(column_signatures)
scores = scores + 1  # 调整分数起始值为1,而非默认的0

# 3. 批量创建分数列
score_cols = {}
for col_name, score in zip(df.columns, scores):
    score_cols[f'score_{col_name}'] = [score] * len(df)

# 4. 将分数列合并到原DataFrame
result_df = df.assign(**score_cols)

代码说明

  • 列签名生成:df.apply(tuple, axis=0)把每列的24个值转成元组,完全相同的列会生成一模一样的元组,以此作为列的唯一标识。
  • 分数分配:pd.factorize会把相同的签名映射为连续整数,加1是为了让分数从1开始,符合你示例中的格式。
  • 分数列创建:遍历原列名,为每个列生成score_xxx格式的新列,整列填充对应分数。
  • 合并数据:用assign方法批量添加所有分数列,避免循环修改原DataFrame。

效果验证

运行后result_df中:

  • score_A、score_C、score_F整列值都是1
  • score_B、score_Z整列值都是2
  • score_D整列值都是3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:37:20