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

如何以Pythonic方式统计DataFrame每行分类特征的标签出现次数?

Pythonic way to count categorical label occurrences per row in a DataFrame

Here are two efficient, Pythonic approaches to solve your problem:

Approach 1: Using value_counts with apply (concise for unknown labels)

This method automatically detects all unique labels from your data and tallies their occurrences per row:

import pandas as pd

qualityOfLife_df = pd.DataFrame(
    [['A', 'Up', 'Up', 'Same'], ['B', 'Up', 'Down', 'Up'], ['C', 'Down', 'Down', 'Down']],
    columns=['City', 'Crime', 'Pollution', 'Jobs']
)

# Target columns containing categorical labels
cat_columns = ['Crime', 'Pollution', 'Jobs']

# Extract all unique labels across the categorical columns
unique_labels = qualityOfLife_df[cat_columns].stack().unique()

# Calculate row-wise counts, fill missing labels with 0, and rename columns
label_counts = qualityOfLife_df[cat_columns].apply(
    lambda row: row.value_counts().reindex(unique_labels, fill_value=0),
    axis=1
).rename(columns=lambda x: f'n{x}')

# Merge counts back to the original DataFrame
result = pd.concat([qualityOfLife_df, label_counts], axis=1)

print(result)

Approach 2: Using pd.get_dummies (vectorized, better for large datasets)

This vectorized method avoids row-wise loops, making it faster for big datasets:

import pandas as pd

qualityOfLife_df = pd.DataFrame(
    [['A', 'Up', 'Up', 'Same'], ['B', 'Up', 'Down', 'Up'], ['C', 'Down', 'Down', 'Down']],
    columns=['City', 'Crime', 'Pollution', 'Jobs']
)

# Create dummy variables for all categorical columns (excluding City)
dummies = pd.get_dummies(qualityOfLife_df.drop('City', axis=1))

# Sum dummy columns for each label and add to the original DataFrame
qualityOfLife_df['nUp'] = dummies.filter(like='_Up').sum(axis=1)
qualityOfLife_df['nDown'] = dummies.filter(like='_Down').sum(axis=1)
qualityOfLife_df['nSame'] = dummies.filter(like='_Same').sum(axis=1)

print(qualityOfLife_df)

Both methods will produce your desired output:

City Crime Pollution Jobs  nUp  nDown  nSame
0    A    Up        Up  Same    2      0      1
1    B    Up      Down    Up    2      1      0
2    C  Down      Down  Down    0      3      0

Key Notes:

  • Approach 1 is ideal if you don't know all possible labels upfront—it automatically detects them from your data.
  • Approach 2 is more performant for large datasets since it leverages pandas' vectorized operations instead of row-wise processing.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:04:09