如何在DataFrame中仅对满足条件的行执行groupby并保留其余行
解决DataFrame分组筛选并保留非条件行的问题
针对需求——对Binary值为True的记录按Number分组,仅保留每组中Version最大的行,同时完整保留所有Binary值为False的行,可以按以下步骤实现:
操作步骤
- 将原DataFrame拆分为两个子集:符合条件(
Binary=True)的行、不符合条件(Binary=False)的行 - 对符合条件的子集按
Number分组,筛选出每组内Version最大的记录 - 合并处理后的符合条件子集与未处理的不符合条件子集,得到最终结果
代码示例
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'Number': [1, 1, 1, 2, 2], 'Version': [0, 1, 2, 0, 1], 'Binary': [True, True, True, False, False], 'Random column': ['a', 'b', 'c', 'a', 'b'] }) # 拆分数据 df_true = df[df['Binary'] == True] df_false = df[df['Binary'] == False] # 对符合条件的分组,保留每组Version最大的行 df_true_processed = df_true.loc[df_true.groupby('Number')['Version'].idxmax()] # 合并两部分数据并整理顺序 result = pd.concat([df_true_processed, df_false]).sort_values('Number').reset_index(drop=True) print(result)
最终输出
| Number | Version | Binary | Random column |
|---|---|---|---|
| 1 | 2 | True | c |
| 2 | 0 | False | a |
| 2 | 1 | False | b |
内容的提问来源于stack exchange,提问作者AvocadoToast
相关产品推荐
相关产品推荐

