假设我们有一个数据帧:
df = pd.DataFrame(pd.np.zeros((15,10,)), dtype=int, \
index=[['a']*5+['b']*5+['c']*5, list(range(15))])
df.index.names=['index0', 'index1']
pd.np.random.seed(0)
for i, v in df.iterrows():
v.loc[pd.np.random.randint(10)] = 1
df
0 1 2 3 4 5 6 7 8 9
index0 index1
a 0 0 0 0 0 0 1 0 0 0 0
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
4 0 0 0 0 0 0 0 1 0 0
b 5 0 0 0 0 0 0 0 0 0 1
6 0 0 0 1 0 0 0 0 0 0
7 0 0 0 0 0 1 0 0 0 0
8 0 0 1 0 0 0 0 0 0 0
9 0 0 0 0 1 0 0 0 0 0
c 10 0 0 0 0 0 0 0 1 0 0
11 0 0 0 0 0 0 1 0 0 0
12 0 0 0 0 0 0 0 0 1 0
13 0 0 0 0 0 0 0 0 1 0
14 0 1 0 0 0 0 0 0 0 0
如何先按“1”的出现顺序对块a、b和c中的行进行排序,然后再对a、b和c进行排序?你知道吗
预期产量:
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”,实际上这些是不同的文本值。你知道吗
一种方法是将
pandas.DataFrame.groupby
与idxmax
和sort_values
一起使用:输出:
如果
1
是文本,其余部分相同,请尝试使用pandas.Dataframe.ne
相关问题 更多 >
编程相关推荐