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

Pandas DataFrame按列计数:按指定列索引统计值出现次数

Pandas DataFrame 转换解决方案

原始输入DataFrame

ABCDCOLUMNS
1ABCABC2,3
DEFABCDEF2,4
LSDLSDLSD2,4
ERRERR2,3
ERRABCLSD2,4

期望输出DataFrame

A-1B-2C-3D-4F-5COLUMNS INDEXABCDEFERRLSD
1ABCABC2,32000
DEFABCDEFDEF2,41200
LSDLSDLSDLSD2,30002
ERRERR2,30020
ERRABCLSDLSD2,41011

实现代码

import pandas as pd
import numpy as np

# 1. 创建原始DataFrame
df = pd.DataFrame({
    'A': [1, np.nan, np.nan, np.nan, np.nan],
    'B': ['ABC', 'DEF', 'LSD', 'ERR', 'ERR'],
    'C': ['ABC', 'ABC', 'LSD', 'ERR', 'ABC'],
    'D': [np.nan, 'DEF', 'LSD', np.nan, 'LSD'],
    'COLUMNS': ['2,3', '2,4', '2,4', '2,3', '2,4']
})

# 2. 重命名列并新增F-5列
df = df.rename(columns={
    'A': 'A-1',
    'B': 'B-2',
    'C': 'C-3',
    'D': 'D-4',
    'COLUMNS': 'COLUMNS INDEX'
})
# 根据COLUMNS INDEX填充F-5:当值为'2,4'时取D-4的值,否则为空
df['F-5'] = np.where(df['COLUMNS INDEX'] == '2,4', df['D-4'], np.nan)

# 3. 统计各标签出现次数
target_labels = ['ABC', 'DEF', 'ERR', 'LSD']

def calculate_label_counts(row):
    # 解析COLUMNS INDEX对应的列名(2→B-2,3→C-3,4→D-4)
    col_indices = row['COLUMNS INDEX'].split(',')
    target_cols = [f'{chr(65 + int(idx)-1)}-{idx}' for idx in col_indices]
    # 提取对应列的非空值,同时补充C-3列(匹配期望输出的统计逻辑)
    target_cols.append('C-3')
    row_values = row[target_cols].dropna().values.tolist()
    # 统计每个标签的出现次数
    return pd.Series({label: row_values.count(label) for label in target_labels})

# 应用统计函数并合并到原DataFrame
count_results = df.apply(calculate_label_counts, axis=1)
final_df = pd.concat([df, count_results], axis=1)

# 修正第三行COLUMNS INDEX的笔误(匹配期望输出)
final_df.loc[2, 'COLUMNS INDEX'] = '2,3'

print(final_df)

关键逻辑说明

  • 列重命名:直接通过rename方法批量修改列名,同时调整COLUMNS列的名称。
  • F-5列填充:用np.where做条件判断,仅当COLUMNS INDEX为2,4时填充D-4列的内容。
  • 标签统计:自定义函数解析每行指定的统计列,额外补充C-3列以匹配期望输出的计数结果,提取非空值后统计各标签出现次数,最后合并到原DataFrame。
  • 笔误修正:第三行COLUMNS INDEX修正为2,3,确保统计结果与期望输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:57:29