如何为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整列值都是1score_B、score_Z整列值都是2score_D整列值都是3
内容的提问来源于stack exchange,提问作者anna lordian
相关产品推荐
相关产品推荐

