如何从多列分组的Pandas GroupBy对象中选择指定分组?
解决Pandas多列分组后仅按部分键筛选的问题
当你已经用['A','B']分组得到g_df后,直接用get_group没法只传单个B键值——因为分组的键是**(A,B)的组合对**,get_group必须接收完整的组合键才会生效。不过可以通过以下方法实现需求:
方法1:筛选目标分组键后合并
先从g_df.groups里找出所有B值为目标值的分组键,再逐个获取分组并合并:
import pandas as pd # 假设已经有分组好的g_df target_b = 'B Key' # 筛选出所有B等于target_b的分组键 valid_keys = [key for key in g_df.groups if key[1] == target_b] # 合并这些分组 filtered_df = pd.concat([g_df.get_group(k) for k in valid_keys])
方法2:利用GroupBy的filter方法
如果只是要过滤出符合B条件的行,也可以直接用filter方法,更简洁:
filtered_df = g_df.filter(lambda x: x['B'].iloc[0] == 'B Key')
这里lambda里的x是每个分组的子DataFrame,因为每个分组里的B值都是相同的(毕竟是按B分组的),所以取第一个值判断就行。
为什么你之前的尝试失败?
g_df.get_group((tuple(g_df['A'].unique()),'B Key')):分组键是单个(A,B)对,不是A的所有值的集合,这个组合不存在,所以报KeyError。g_df.get_group(,'B Key')):语法错误,Python不允许元组里只写后半部分,必须提供完整的元素。
内容的提问来源于stack exchange,提问作者jumpenjack
相关产品推荐
相关产品推荐

