nlargest值我有一個數據幀,看起來像下面的圖片: 得到的多指標數據幀
這裏UID和ID索引。該數據幀是從單個索引數據幀轉換而來的,因此某些列有重複值。對於每個uid,avg_diff的所有值都相同,但不同的uid對於此字段將具有不同的值。我想用不同的uid獲得最大的值。
注意:這是一個巨大的數據框架,所以我正在尋找最優化的方式。
nlargest值我有一個數據幀,看起來像下面的圖片: 得到的多指標數據幀
這裏UID和ID索引。該數據幀是從單個索引數據幀轉換而來的,因此某些列有重複值。對於每個uid,avg_diff的所有值都相同,但不同的uid對於此字段將具有不同的值。我想用不同的uid獲得最大的值。
注意:這是一個巨大的數據框架,所以我正在尋找最優化的方式。
我認爲你可以先刪除get_level_values
和duplicated
與boolean indexing
,~
的副本用於反轉布爾掩碼。
然後使用DataFrame.nlargest
或sort_values
+ head
:
df = pd.DataFrame({'uid':[1,1,1,2,2,3,3], 'id':[2,3,4,5,6,1,3],
'avg_diff':[0.1,0.1,0.1,0.2,0.2,0.3,0.3]})
df = df.set_index('uid').set_index('id', drop=False, append=True)
print (df)
avg_diff id
uid id
1 2 0.1 2
3 0.1 3
4 0.1 4
2 5 0.2 5
6 0.2 6
3 1 0.3 1
3 0.3 3
mask = df.index.get_level_values('uid').duplicated()
print (~mask)
[ True False False True False True False]
df = df[~mask].nlargest(2, 'avg_diff')
print (df)
avg_diff id
uid id
3 1 0.3 1
2 5 0.2 5
另一種解決方案:
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])
使用'打印(DF [〜掩模] .nsmallest(2, 'avg_diff'))' – jezrael
或'DF [〜掩模] .sort_values( 'avg_diff')。頭(2)' – jezrael