EDIT RemoveAt
- слабость в моей предыдущей версии. Это решение преодолевает это.
public static IEnumerable Shuffle(
this IEnumerable source,
Random generator = null)
{
if (generator == null)
{
generator = new Random();
}
var elements = source.ToArray();
for (var i = elements.Length - 1; i >= 0; i--)
{
var swapIndex = generator.Next(i + 1);
yield return elements[swapIndex];
elements[swapIndex] = elements[i];
}
}
Обратите внимание на необязательный параметр Random generator
, если реализация базовой фреймворка Random
не является потокобезопасной или криптографически достаточно сильной для ваших нужд, вы можете ввести свою реализацию в операция.
Вот идея, расширить IList в (надеюсь) эффективный путь.
public static IEnumerable Shuffle(this IList list)
{
var choices = Enumerable.Range(0, list.Count).ToList();
var rng = new Random();
for(int n = choices.Count; n > 1; n--)
{
int k = rng.Next(n);
yield return list[choices[k]];
choices.RemoveAt(k);
}
yield return list[choices[0]];
}
Это довольно легко сделать с Пандами .
Общий процесс:
Письменный код:
import pandas as pd
import numpy as np
#import data
df = pd.read_csv('Your_Filename.csv')
#initialize list
list_A = np.arange(365)
list_B = np.arange(365)*2
#change list to series
series_A = pd.Series(list_A)
series_B = pd.Series(list_B)
#save series as dataframe column
df['column_name_A'] = series_A.values
df['column_name_B'] = series_B.values
#save dataframe to csv
df.to_csv('output_filename.csv')