如何在指定层级截断Pandas MultiIndex,保留每个实例前n个时间点
Pandas MultiIndex按实例保留前n个时间点的截断方法
先看原始的MultiIndex数据:
var_0 var_1 instances timepoints 0 1 1 4 2 2 5 3 3 6 4 5 8 1 1 1 4 2 2 55 3 3 6 4 3 6 2 1 1 42 2 2 5 3 3 6
需求很明确:给每个instances(实例)只保留前n个timepoints(时间点),比如n=2时,预期结果是:
var_0 var_1 instances timepoints 0 1 1 4 2 2 5 1 1 1 4 2 2 55 2 1 1 42 2 2 5
有两种简单的方法可以实现:
方法1:用groupby+head(最简洁)
直接按instances分组,取每组的前n行就行:
n = 2 result = df.groupby(level='instances').head(n)
方法2:用cumcount做布尔索引
如果需要更灵活的筛选逻辑,可以先给每个组内的行标记序号,再筛选序号小于n的行:
n = 2 # 给每个instances下的行从0开始计数 group_seq = df.groupby(level='instances').cumcount() # 只保留计数小于n的行 result = df[group_seq < n]
两种方法都能得到你要的结果,第一种写法更短,日常用起来更顺手。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

