Перемешать строки, разделенные запятыми, для отдельной строки и столбца (для каждого поля) - PullRequest
1 голос
/ 01 октября 2019

У меня есть фрейм данных со строками значений, которые были объединены, но разделены запятой.

Row1 foo, bar, test, case

Row2 base, ball, basket, foot

Цель состоит в том, чтобы перемешивать / рандомизировать значения каждого поля, сохраняя порядок строк (не перемешивайте столбцы, индекс должен быть сохранен). как это:

Row1 тест, foo, case, bar

Row2 мяч, фут, основание, корзина

РЕШЕНИЕ НАЙДЕНО:

Original_DF = # Our csv loaded data - the DF contains multiple columns of data attached to primary

data_list=[e for e in Original_DF['Data_List']]   # each 'Data_List' field was one long string with a comma seperating words, we needed to make them a list

Shuff_DF=pd.DataFrame()
for i in range(len(data_list)):
    myList=np.random.permutation(data_list[i].split(","))
    myString = ",".join(myList)
    Shuff_DF = Shuff_DF.append({'Data_List2': myString}, ignore_index=True)

Original_DF['Data_List2']=Shuff_DF['Data_List2'] # Append newly shuffled Lists to original df

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Другой подход, использующий функциональность pandas (пример):

df = pd.DataFrame({"a": ["foo", "bar", "test", "case"], 
                   "b": ["xoo", "xar", "xest", "xase"]})
for col in df.columns:
    df[col] = df[col].sample(frac=1).values

Вероятно, существует более элегантный подход, позволяющий избежать цикла for с использованием apply.

PS: В качестве альтернативы, изменение другогоответ от @Simon Crane:

df.apply(np.random.permutation, axis=0)
0 голосов
/ 01 октября 2019

Вы можете использовать numpy.random.permutation, чтобы перетасовать список

https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.random.permutation.html

Пример:

import numpy.random

mydata = "foo,bar,baz,bat"

print(numpy.random.permutation(mydata.split(",")))
...