如何在Pandas中仅对指定索引范围的行执行Groupby合并?
解决方案
假设你的示例DataFrame如下(模拟索引2~3存在重复行的情况):
import pandas as pd df = pd.DataFrame({ 'column1': ['A', 'B', 'C', 'C', 'D'], 'column2': ['x', 'y', 'm', 'n', 'z'] }, index=[0, 1, 2, 2, 3])
可以通过拆分-处理-合并的步骤实现需求:
- 拆分DataFrame,分离出需要处理的索引范围(2~3)和其余行
# 筛选索引属于2、3的行作为待处理部分,剩下的保留原样 mask = df.index.isin([2, 3]) df_original = df[~mask].copy() df_target = df[mask].copy()
- 对待处理部分按索引分组,合并
column2为字符串
如果同一索引下其他列(如column1)值一致,直接聚合即可:
# 按索引分组,合并column2为字符串,保留其他列的首个值 df_processed = df_target.groupby(df_target.index).agg({ 'column1': 'first', # 若同一索引下column1值相同,用first/last均可 'column2': ' '.join # 按空格合并,可替换为其他分隔符如',' }).reset_index()
如果同一索引下其他列存在不同值,可根据需求调整聚合方式(比如用','.join合并,或取众数等)。
- 合并两部分数据,恢复原索引顺序
# 合并后按索引排序,重置索引为原索引 final_df = pd.concat([df_original, df_processed]).sort_values(by='index').set_index('index')
执行后,final_df的结果为:
column1 column2 index 0 A x 1 B y 2 C m n 3 D z
内容的提问来源于stack exchange,提问作者now
相关产品推荐
相关产品推荐

