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

如何按条件对多索引DataFrame进行分组合并操作?

多索引DataFrame按条件合并行解决方案

先看你提供的初始代码:

import pandas as pd

# data
data = {
    'date': ['01/01/17', '02/01/17', '03/01/17', '01/01/17', '02/01/17', '03/01/17'],
    'language': ['python', 'python', 'python', 'r', 'r', 'r'],
    'ex_complete': [6, 5, 10, 8, 8, 8]
}

# Convert to DataFrame
df = pd.DataFrame(data)

# Convert DataFrame to JSON
json_data = df.to_json(orient='records')

# Convert JSON data back to DataFrame
df_from_json = pd.read_json(json_data, orient='records')

# Set date and language as multi-index
df_from_json.set_index(['date', 'language'], inplace=True)

df_from_json.sort_index(inplace= True)

问题1:合并指定日期并重命名

要把01/01/17和02/01/17合并为1_2,可以先重置索引,对日期做映射后分组聚合:

# 重置索引将多索引转回普通列
df_reset = df_from_json.reset_index()

# 定义日期替换规则
date_mapping = {
    '01/01/17': '1_2',
    '02/01/17': '1_2'
}
# 替换目标日期,未指定的日期保持原样
df_reset['date'] = df_reset['date'].replace(date_mapping)

# 按新日期和语言分组,对ex_complete求和(可根据需求替换成mean、max等聚合方式)
df_merged_date = df_reset.groupby(['date', 'language'])['ex_complete'].sum().reset_index()

# 重新设置多索引并排序
df_merged_date.set_index(['date', 'language'], inplace=True)
df_merged_date.sort_index(inplace=True)

print(df_merged_date)

运行后会得到4行数据:1_2对应python和r的合并值,加上03/01/17对应的两行。


问题2:合并Python和R并重命名

要把python和r合并为Python_R,同样先重置索引,处理language列后分组聚合:

# 重置索引将多索引转回普通列
df_reset = df_from_json.reset_index()

# 将所有language统一替换为Python_R
df_reset['language'] = 'Python_R'

# 按日期分组聚合
df_merged_lang = df_reset.groupby(['date', 'language'])['ex_complete'].sum().reset_index()

# 重新设置多索引并排序
df_merged_lang.set_index(['date', 'language'], inplace=True)
df_merged_lang.sort_index(inplace=True)

print(df_merged_lang)

这样就能得到3个日期各对应一行Python_R的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:52:45