我有一个像这样的数据框:
a | b | c
a 1 2
b 1 3
c 1 1
d 2 2
e 2 3
f 2 1
我想对行进行改组以减少B
中的连续重复,同时尽可能地按C
中的顺序排列。该数据框可能有数百行。
上面的数据框所需的输出可能类似于:
a | b | c
c 1 1
f 2 1
a 1 2
d 2 2
b 1 3
e 2 3
列B
中没有连续的重复项,并且C
根据数据帧中的行尽可能地顺序排列。 C
的取值范围为1到5,而B
的取值范围很多。
在不再满足条件并且数据框中仍然存在行的地方,可以将行放在数据框中的任何位置(如果这样更容易)。
到目前为止,已向我展示了一种确保在B
中不会出现连续值的方法:
np.random.seed(0)
(df.groupby(df.groupby('B').cumcount(), group_keys=False)
.apply(lambda x: x.sample(frac=1))
.reset_index(drop=True))
但是我很难将C
列的序列合并到代码中。
谢谢!
答案 0 :(得分:2)
按c
进行排序,然后按b
进行排序足以满足您的示例DataFrame的要求,但是一旦b
接受给定c
值的重复值,它将开始崩溃:
df.sort_values(by=['c', 'b'])
a b c
2 c 1 1
5 f 2 1
0 a 1 2
3 d 2 2
1 b 1 3
4 e 2 3