Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从多索引数据帧中获取最大值_Python_Pandas_Dataframe_Multi Index - Fatal编程技术网

Python 从多索引数据帧中获取最大值

Python 从多索引数据帧中获取最大值,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,我有一个数据框,如下图所示: 这里uid和id是索引。此数据帧是从单个索引数据帧转换而来的,因此某些列存在重复值。对于每个uid,avg_diff的所有值都是相同的,但不同的uid在此字段中将具有不同的值。我想用不同的UID获得最大的10个平均差值 注意:这是一个巨大的数据帧,因此我正在寻找最优化的方法。我认为您可以先使用删除重复项,~用于反转布尔掩码 然后使用or+: 另一个解决方案: mask = df.index.get_level_values('uid').duplicated()

我有一个数据框,如下图所示:

这里uid和id是索引。此数据帧是从单个索引数据帧转换而来的,因此某些列存在重复值。对于每个uid,avg_diff的所有值都是相同的,但不同的uid在此字段中将具有不同的值。我想用不同的UID获得最大的10个平均差值


注意:这是一个巨大的数据帧,因此我正在寻找最优化的方法。

我认为您可以先使用删除重复项,
~
用于反转布尔掩码

然后使用or+:


另一个解决方案:

mask = df.index.get_level_values('uid').duplicated() 
print (~mask)
[ True False False  True False  True False]

df = df[~mask].sort_values('avg_diff', ascending=False).head(2)
print (df)

        avg_diff  id
uid id              
3   1        0.3   1
2   5        0.2   5

如果我没弄错的话,您只需要删除“uid”的副本,然后按avr_diff排序

unique_uid = data.reset_index().drop_duplicates("uid").set_index("uid")
print(unique_uid["avr_diff"].sort_values(ascending=False)[:10])

使用
print(df[~mask].nsmallest(2,'avg_diff'))
df[~mask].sort_值('avg_diff')。head(2)
mask = df.index.get_level_values('uid').duplicated() 
print (~mask)
[ True False False  True False  True False]

df = df[~mask].sort_values('avg_diff', ascending=False).head(2)
print (df)

        avg_diff  id
uid id              
3   1        0.3   1
2   5        0.2   5
unique_uid = data.reset_index().drop_duplicates("uid").set_index("uid")
print(unique_uid["avr_diff"].sort_values(ascending=False)[:10])