一种方法是使用
pandas.DataFrame.groupby
具有
idxmax
和
sort_values
:
import pandas as pd
l = (d.loc[d.idxmax(1).sort_values().index] for _, d in df.groupby('index0'))
new_df = pd.concat(sorted(l, key= lambda x:list(x.sum()), reverse=True))
print(new_df)
输出:
0 1 2 3 4 5 6 7 8 9
index0 index1
a 1 1 0 0 0 0 0 0 0 0 0
2 0 0 0 1 0 0 0 0 0 0
3 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0
4 0 0 0 0 0 0 0 1 0 0
c 14 0 1 0 0 0 0 0 0 0 0
11 0 0 0 0 0 0 1 0 0 0
10 0 0 0 0 0 0 0 1 0 0
12 0 0 0 0 0 0 0 0 1 0
13 0 0 0 0 0 0 0 0 1 0
b 8 0 0 1 0 0 0 0 0 0 0
6 0 0 0 1 0 0 0 0 0 0
9 0 0 0 0 1 0 0 0 0 0
7 0 0 0 0 0 1 0 0 0 0
5 0 0 0 0 0 0 0 0 0 1
以防
1
S是文本,其余部分相同,请尝试使用
pandas.Dataframe.ne
tmp = df.ne(0)
# same operation
new_df = df.loc[new_tmp.index]