Неясно, какой конечный результат вы ищете, но, тем не менее, первый шаг, вероятно, тот же. Сгруппируйте кадры данных в отдельные на основе этого столбца. Перемешайте и рекомбинируйте по желанию.
Повторное объединение можно выполнить, сохранив перетасованные кадры данных в виде списка, а затем pd.concat
. При желании вы можете сначала перетасовать список:
from random import shuffle
shuffle(dfs)
Используя этот набор данных:
2 a2
2 b2
2 c2
3 a3
3 b3
3 c3
3 d3
4 a4
4 b4
Этот код:
import pandas as pd
df = pd.read_csv("shuffle.txt", header=None, delim_whitespace=True)
dfs = [x for _, x in df.groupby(df[0])]
from random import shuffle
#shuffle(dfs)
new_dfs = []
for df in dfs:
df = df.sample(frac=1)
new_dfs.append(df)
final_df = pd.concat(new_dfs)
print(final_df)
Получает вас:
0 1
2 2 c2
0 2 a2
1 2 b2
5 3 c3
3 3 a3
6 3 d3
4 3 b3
8 4 b4
7 4 a4
Раскомментирование линии тасования дает вам:
0 1
8 4 b4
7 4 a4
6 3 d3
5 3 c3
4 3 b3
3 3 a3
0 2 a2
1 2 b2
2 2 c2