如何按条件对多索引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
相关产品推荐
相关产品推荐

