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')