如何将 pandas.DataFrame 平均分成 n 组?

How can I evenly split up a pandas.DataFrame into n-groups?

我需要对存储在 pandas.DataFrame 中的数据集执行 n 次(在我的特定情况下为 5 次)交叉验证。我目前的方式似乎是重新排列行标签;

spreadsheet1 = pd.ExcelFile("Testing dataset.xlsx") 
dataset = spreadsheet1.parse('Sheet1') 

data = 5 * [pd.DataFrame()]

i = 0
while(i  < len(dataset)):
    j = 0
    while(j < 5 and i < len(dataset)):
        data[j] = (data[j].append(dataset.iloc[i])).reset_index(drop = True)
        i += 1
        j += 1

如何拆分我的 DataFrame efficiently/intelligently 而不篡改列的顺序?

使用 np.array_split 将其分解为“均匀”大小的 DataFrame 列表。如果您采样完整的 DataFrame

,您也可以随机播放
import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(24).reshape(-1,2), columns=['A', 'B'])
N = 5    

np.array_split(df, N)
#np.array_split(df.sample(frac=1), N)  # Shuffle and split

[   A  B
 0  0  1
 1  2  3
 2  4  5,
     A   B
 3   6   7
 4   8   9
 5  10  11,
     A   B
 6  12  13
 7  14  15,
     A   B
 8  16  17
 9  18  19,
      A   B
 10  20  21
 11  22  23]

我仍然不确定你为什么要这样做,但这里有一个解决方案

df['fold'] = np.random.randint(1, 6, df.shape[0])

例如,您的第一次弃牌是

df.loc[df['fold'] == 1]