python pandas - 减少一列中的连续重复项,同时保持另一列中的顺序

python pandas - reduce consecutive dupes in one column, while maintaining sequential order in another

我有一个像这样的数据框:

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根据dataframe中的行尽可能按顺序排列。 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 的顺序合并到代码中。

提前致谢!

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