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

时间:2019-06-12 00:36:01

标签: python pandas sorting dataframe shuffle

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

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列的序列合并到代码中。

谢谢!

1 个答案:

答案 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