如何将 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]
我需要对存储在 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]