我希望对以下的pandas数据框按照 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']
转换为有序分类数据。然而,这些方法中没有一种特别优雅。提前感谢您的任何帮助!
value_counts
是按降序排列的。在这个例子中,用户2有90行,而用户1只有10行。我希望用户2的行首先出现。不幸的是,Series.argsort
忽略了order
关键字参数。 - Iain Dillinghamnp.bincount(i)[i]
的结果变为负数。-np.bincount(i)[i]
。我正在寻找更美观的解决方案。 - piRSquared