如何按DataFrame的y列及分组最后一行的x值进行分组?
分组DataFrame的通用方法
原始DataFrame
import pandas as pd df = pd.DataFrame( { 'x': ['a', 'b', 'c', 'c', 'e', 'f', 'd', 'a', 'b', 'c', 'c', 'e', 'f', 'd'], 'y': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'f', 'f', 'f', 'f', 'g', 'g', 'g'], } )
期望输出
x y 0 a a 1 b a 2 c a 3 c a 7 a f 8 b f 9 c f 10 c f x y 4 e b 5 f b 6 d b 11 e g 12 f g 13 d g
需求说明
需要完成以下分组步骤:
- 第一步:按
y列进行分组 - 第二步:按每个
y分组最后一行的x值进行二次分组
示例中已知目标x值为c和d,可以通过filter手动筛选,但实际数据中无法提前预知这些值,需要通用的分组方法。
通用解决方案
先为每个y分组标记其最后一行的x值,再以此为依据进行分组,代码如下:
# 为每行添加对应y分组最后一行的x值作为标记 df['last_x'] = df.groupby('y')['x'].transform(lambda g: g.iloc[-1]) # 按标记列last_x分组 grouped = df.groupby('last_x') # 遍历输出每个分组(可根据实际需求替换为其他处理逻辑) for group_key, subset in grouped: print(f"### 分组:last_x={group_key}") print(subset.drop(columns='last_x'))
执行后即可得到与期望一致的分组结果,该方法无需预先知道分组标识,适配所有未知场景。
内容的提问来源于stack exchange,提问作者AmirX
相关产品推荐
相关产品推荐

