如何通过筛选特定行元素从大型DataFrame生成小型DataFrame
问题描述
我有如下DataFrame:
| Col1 | Col2 | Col3 |
|---|---|---|
| A | 1 | 10 |
| A | 2 | 20 |
| A | 3 | 30 |
| B | 1 | 10 |
| B | 2 | 20 |
| C | 4 | 40 |
| C | 5 | 70 |
需要得到按Col1分组后每组的最后一行数据,输出如下:
| Col1 | Col2 | Col3 |
|---|---|---|
| A | 3 | 30 |
| B | 2 | 20 |
| C | 5 | 70 |
解决方案
可以使用Pandas的groupby结合tail(1)或last()方法实现需求:
方法1:用tail(1)直接取每组最后一行
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'Col1': ['A', 'A', 'A', 'B', 'B', 'C', 'C'], 'Col2': [1, 2, 3, 1, 2, 4, 5], 'Col3': [10, 20, 30, 10, 20, 40, 70] }) # 按Col1分组,取每组最后一行并重置索引 result = df.groupby('Col1').tail(1).reset_index(drop=True) print(result)
方法2:用last()提取每组各列最后值
# 按Col1分组,取每组各列的最后一个值并重置索引 result = df.groupby('Col1').last().reset_index() print(result)
两种方法都能得到目标输出:tail(1)直接保留每组的最后一行完整数据;last()提取每组中每一列的最后一个非缺失值(无缺失值时结果与tail(1)完全一致)。
内容的提问来源于stack exchange,提问作者Surachit Sarkar
相关产品推荐
相关产品推荐

