在列值panda的子集内对列进行重排/排列



我有以下列为A,B,C,D,E:的DataFrame

A    B    C    D    E
a_0  b_0  c_0  1    2
a_0  b_1  c_1  3    4
a_0  b_2  c_2  5    6
a_1  b_1  c_2  7    8
a_1  b_3  c_0  9    10
a_1  b_0  c_3  11   12    

如何仅排列列A中每组值中的列D, E?例如:我正在寻找如下排列:

A    B    C    D    E
a_0  b_0  c_0  3    4
a_0  b_1  c_1  5    6
a_0  b_2  c_2  1    2
a_1  b_1  c_2  11   12
a_1  b_3  c_0  9    10
a_1  b_0  c_3  7    8

其中列A,B,C保持原样但列D,E的值被混洗,但在对应于列A中的值的行内。

尝试set_index+groupby sample:

import pandas as pd
df = pd.DataFrame({
'A': ['a_0', 'a_0', 'a_0', 'a_1', 'a_1', 'a_1'],
'B': ['b_0', 'b_1', 'b_2', 'b_1', 'b_3', 'b_0'],
'C': ['c_0', 'c_1', 'c_2', 'c_2', 'c_0', 'c_3'],
'D': [1, 3, 5, 7, 9, 11],
'E': [2, 4, 6, 8, 10, 12]
})
df[['D', 'E']] = df.set_index('A')[['D', 'E']] 
.groupby(level=0) 
.sample(frac=1).values
print(df)

可能的df:

A    B    C   D   E
0  a_0  b_0  c_0   3   4
1  a_0  b_1  c_1   1   2
2  a_0  b_2  c_2   5   6
3  a_1  b_1  c_2   7   8
4  a_1  b_3  c_0  11  12
5  a_1  b_0  c_3   9  10

最新更新