簡體   English   中英

如何通過一列的值計數對熊貓數據框進行排序?

[英]How to sort a pandas data frame by value counts of a column?

我想根據df['user_id'].value_counts()的結果對以下熊貓數據框進行排序。

import pandas as pd
n = 100
df = pd.DataFrame(index=pd.Index(range(1, n+1), name='gridimage_id'))
df['user_id'] = 2
df['has_term'] = True
df.iloc[:10, 0] = 1

排序應該是穩定的,這意味着雖然用戶2的行將排在用戶1的行之前,但用戶2的行和用戶1的行將保持原始順序。

我正在考慮使用df.groupby ,將df['user_id'].value_counts()與數據框合並,還將df['user_id']轉換為有序的分類數據。 但是,這些方法似乎都不是特別優雅。

在此先感謝您的幫助!

transformargsort

使用kind='mergesort'來保持穩定性

df.iloc[df.groupby('user_id').user_id.transform('size').argsort(kind='mergesort')]

factorizebincountargsort

使用kind='mergesort'來保持穩定性

i, r = pd.factorize(df['user_id'])
a = np.argsort(np.bincount(i)[i], kind='mergesort')
df.iloc[a]

對評論的回應

謝謝@piRSquared。 但是,可以顛倒排序順序嗎? value_counts降序排列。 在該示例中,用戶2有90行,而用戶1有10行。 我希望用戶2的行排在第一位。 不幸的是,Series.argsort忽略了kwarg順序。 –伊恩·迪林漢姆4分鍾前

又快又臟

使計數為負

df.iloc[df.groupby('user_id').user_id.transform('size').mul(-1).argsort(kind='mergesort')]

要么

i, r = pd.factorize(df['user_id'])
a = np.argsort(-np.bincount(i)[i], kind='mergesort')
df.iloc[a]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM