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
我有一个像这样的数据框:
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