我的数据框是 y列分组,并按 y列的计数列进行排序。
代码:
df['count'] = df.groupby(['y'])['y'].transform(pd.Series.value_counts)
df = df.sort('count', ascending=False)
输出:
x y count
1 a 4
3 a 4
2 a 4
1 a 4
2 c 3
1 c 3
2 c 3
2 b 2
1 b 2
现在,我想在频率上对 x列进行排序,并在 y列上分组相同的值,如下所示:
预期输出:
x y count
1 a 4
1 a 4
2 a 4
3 a 4
2 c 3
2 c 3
1 c 3
2 b 2
1 b 2
答案 0 :(得分:1)
您似乎需要groupby
和value_counts
然后numpy.repeat
才能将展开索引值计算为DataFrame
:
s = df.groupby('y', sort=False)['x'].value_counts()
#alternative
#s = df.groupby('y', sort=False)['x'].apply(pd.Series.value_counts)
print (s)
y x
a 1 2
2 1
3 1
c 2 2
1 1
b 1 1
2 1
Name: x, dtype: int64
df1 = pd.DataFrame(np.repeat(s.index.values, s.values).tolist(), columns=['y','x'])
#change order of columns
df1 = df1.reindex_axis(['x','y'], axis=1)
print (df1)
x y
0 1 a
1 1 a
2 2 a
3 3 a
4 2 c
5 2 c
6 1 c
7 1 b
8 2 b
答案 1 :(得分:1)
如果您使用的是不支持df.sort_values的旧版本。你可以使用:
df.sort(columns=['count','x'], ascending=[False,True])