使用多索引上的条件选择数据帧的子集

时间:2018-05-10 16:17:55

标签: python pandas filter group-by multi-index

所有

我有以下格式的数据框:

ind date value1 value2 x1 23-04-2018 1.3 7.2 x1 03-05-2018 4.6 3.5 x2 04-04-2018 2.0 8.5

ind 日期是指数。如果 ind 的一个值有多行,我只想保留最新的日期。

因此,在我的示例中,首选结果是:

ind date value1 value2 x1 03-05-2018 4.6 3.5 x2 04-04-2018 2.0 8.5

日期列采用日期时间格式,因此查找组内的最大日期可能有效。但是是否可以使用这样的条件,例如与groupby结合使用(如SQL中的GROUPBY和HAVING)。或者有更好的方法吗?

有没有人有解决方案或提示?

编辑:我略微改变了我的榜样。多行不一定是重复的。

1 个答案:

答案 0 :(得分:0)

一种有点冗长的方法,不需要排序:

# Gets the row indices as list of lists
idx = df.reset_index('date', drop=False) \
    .groupby('ind', sort=False)['date'] \
    .max() \
    .iteritems()

df.loc(axis=0)[list(idx)]

这取决于['idx', 'date']df的顺序。