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

如何按列名及多级索引为Pandas MultiIndex DataFrame添加值

Adding Values to a Pandas MultiIndex DataFrame

Got it, let's break down exactly how to add values to your MultiIndex DataFrame using column names and index levels. First, let's polish your initial code to have a complete, working starting point—I'll fill in the truncated third index array to match the pattern of your first two levels:

import pandas as pd
import numpy as np

# Complete the third level of your multi-index (follows the 'r'/'p' pattern across groups)
arrays = [
    np.array(['pearson', 'pearson', 'pearson', 'pearson', 'spearman', 'spearman', 'spearman', 'spearman', 'kendall', 'kendall', 'kendall', 'kendall']),
    np.array(['PROFESSIONAL', 'PROFESSIONAL', 'STUDENT', 'STUDENT', 'PROFESSIONAL', 'PROFESSIONAL', 'STUDENT', 'STUDENT', 'PROFESSIONAL', 'PROFESSIONAL', 'STUDENT', 'STUDENT']),
    np.array(['r', 'p', 'r', 'p', 'r', 'p', 'r', 'p', 'r', 'p', 'r', 'p'])
]

# Create the multi-index with descriptive names for clarity
multi_index = pd.MultiIndex.from_arrays(arrays, names=['corr_type', 'user_type', 'stat'])

# Initialize an empty DataFrame with this index and example columns
df = pd.DataFrame(index=multi_index, columns=['score', 'sample_size'])

Now let's cover the most common, practical ways to add values based on index levels and column names:

1. Assign to a Specific Index + Column Pair

Use .loc with a tuple of index values to target an exact row, then specify the column name. This is ideal for single, precise assignments:

# Add a score value for pearson correlation, professional users, 'r' statistic
df.loc[('pearson', 'PROFESSIONAL', 'r'), 'score'] = 0.85

# Add sample size for spearman correlation, student users, 'p' statistic
df.loc[('spearman', 'STUDENT', 'p'), 'sample_size'] = 120

2. Batch Assign to a Subset of the Index

If you want to assign values to multiple rows at once (e.g., all entries in one index level), use slice(None) as a wildcard for any level you want to match entirely. You can also use : as a shorthand:

# Assign scores to ALL professional users' 'r' statistic (across all correlation types)
# slice(None) matches every value in the 'corr_type' level
df.loc[(slice(None), 'PROFESSIONAL', 'r'), 'score'] = [0.82, 0.78, 0.75]

# Shorthand using ':' instead of slice(None)
df.loc[(:, 'STUDENT', 'p'), 'sample_size'] = [90, 95, 85]

3. Use pd.IndexSlice for Complex Selections

For more flexible, readable subsetting (especially with larger MultiIndexes), use pd.IndexSlice to create reusable index filters:

idx = pd.IndexSlice

# Assign values to all pearson correlation entries (any user type, any stat) for the 'score' column
df.loc[idx['pearson', :, :], 'score'] = [0.85, 0.01, 0.69, 0.03]

# Target a mix: spearman or kendall correlations, professional users, 'p' stat
df.loc[idx[['spearman', 'kendall'], 'PROFESSIONAL', 'p'], 'sample_size'] = 110

4. Batch Assign Multiple Index-Column Pairs

If you have a list of specific assignments to make, loop through them with a list of tuples:

# Define your assignments as (index_tuple, column_name, value)
assignments = [
    (('kendall', 'STUDENT', 'r'), 'score', 0.72),
    (('pearson', 'PROFESSIONAL', 'p'), 'sample_size', 150),
    (('spearman', 'PROFESSIONAL', 'r'), 'score', 0.79)
]

# Loop through and assign each value
for index, col, val in assignments:
    df.loc[index, col] = val

5. Fill Entire Columns/Rows

If you want to set a default value for an entire column (or row), you can directly assign or use fillna:

# Set a default sample size for all empty entries
df['sample_size'] = df['sample_size'].fillna(100)

# Assign a fixed value to an entire row (all columns for a specific index)
df.loc[('kendall', 'PROFESSIONAL', 'r'), :] = [0.75, 105]

The key takeaway is that .loc is your go-to tool here—by passing tuples of index values (or wildcards/slices), you can precisely target any combination of MultiIndex levels and columns to add your values.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:56:24