我有以下列为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