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

Python 使用多索引上的条件选择数据帧的子集,python,pandas,filter,group-by,multi-index,Python,Pandas,Filter,Group By,Multi Index,全部, 我有以下格式的数据帧: ind日期值1值2 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和date是索引。如果一个ind值有多行,我只想保留最新的日期 因此,在我的示例中,首选结果是: ind日期值1值2 x1 03-05-2018 4.6 3.5 x2 04-04-2018 2.0 8.5 date列采用datetime格式,因此可以在组中查找最大日期。但是是否可以使用这样的条件,例如与gro

全部,

我有以下格式的数据帧:

ind日期值1值2
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和date是索引。如果一个ind值有多行,我只想保留最新的日期

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

ind日期值1值2
x1 03-05-2018 4.6 3.5
x2 04-04-2018 2.0 8.5

date列采用datetime格式,因此可以在组中查找最大日期。但是是否可以使用这样的条件,例如与groupby(比如groupby和have)结合使用。还是有更好的方法

有人有解决办法或建议吗


编辑:我稍微改变了我的例子。多行不一定是重复的。

您可以使用排序索引和删除重复项

其中df最初没有索引:

print(df)

  ind       date  value1  value2
0  x1 2018-04-23     1.3     7.2
1  x1 2018-03-05     1.3     7.2
2  x2 2018-04-04     2.0     8.5

df.set_index(['ind','date']).sort_index(level=[1], ascending=[False]).drop_duplicates()
或如@piRSquare所述:

df.set_index(['ind','date']).sort_index(level=[1]).drop_duplicates(keep='last')
输出:

                value1  value2
ind date                      
x1  2018-04-23     1.3     7.2
x2  2018-04-04     2.0     8.5

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

# 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)]

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

可以跳过升序参数并使用
keep='last'
。就像阿凡达的改变一样,谢谢你。我今天感觉到了一些学校精神。谢谢!这项措施目前有效。行不一定是重复的,所以对于这些情况也有一个解决方案是很好的。很抱歉没有给出明确的答复example@Rob传递要评估重复性的列<代码>删除重复项('ind')