gpt4 book ai didi

python - 拆分 Pandas DataFrame,其中一个因子列均匀分布在拆分中

转载 作者:行者123 更新时间:2023-12-01 00:12:31 24 4
gpt4 key购买 nike

我试图将 Pandas DataFrame 拆分为多个单独的 DataFrame,其中其中一列均匀分布在生成的 DataFrame 中。例如,如果我希望将以下 DataFrame 拆分为 3 个不同的 DataFrame,其中每个 DataFrame 包含每个扇区的一条记录(随机选择)。

所以 df 看起来像这样:

    id   Name     Sector
1 John A
2 Steven A
3 Jane A
4 Kyle A
5 Ashley B
6 Ken B
7 Tom B
8 Peter B
9 Elaine C
10 Tom C
11 Adam C
12 Simon C
13 Stephanie D
14 Jan D
15 Marsha D
16 David D
17 Drew E
18 Kit E
19 Corey E
20 James E

将产生两个 DataFrame,其中一个可能如下所示,而另一个则包含剩余的记录。

    id   Name     Sector
1 John A
2 Steven A
7 Tom B
8 Peter B
10 Tom C
11 Adam C
13 Stephanie D
16 David D
19 Corey E
20 James E

我知道np.array_split(df, 2)会让我到达那里,但它可能不会像我需要的那样均匀地分配扇区。

(为了清晰起见进行了编辑)

最佳答案

根据评论更新并更新问题:

df_1=df.groupby('Sector', as_index=False, group_keys=False).apply(lambda x: x.sample(n=2))
df_2 = df[~df.index.isin(df_1.index)]

print(df_1)
id Name Sector
2 3 Jane A
3 4 Kyle A
7 8 Peter B
5 6 Ken B
11 12 Simon C
9 10 Tom C
12 13 Stephanie D
15 16 David D
19 20 James E
17 18 Kit E

print(df_2)
id Name Sector
0 1 John A
1 2 Steven A
4 5 Ashley B
6 7 Tom B
8 9 Elaine C
10 11 Adam C
13 14 Jan D
14 15 Marsha D
16 17 Drew E
18 19 Corey E
<小时/>

这是一种“时髦”的方法,使用顺序编号和随机采样:

df['grp'] = df.groupby('Sector')['Sector']\
.transform(lambda x: x.notna().cumsum().sample(frac=1))
dd = dict(tuple(df.groupby('grp')))

输出:

dd[1]

id Name Sector grp
0 1 John A 1
4 5 Ken B 1
6 7 Elaine C 1

dd[2]

id Name Sector grp
2 3 Jane A 2
5 6 Tom B 2
7 8 Tom C 2

dd[3]

id Name Sector grp
1 2 Steven A 3
3 4 Ashley B 3
8 9 Adam C 3

详细信息:

  • 在每个扇区组中创建从 1 开始的数字序列,然后随机化组中的数字以创建分组 key ,组。
  • 使用 grp 进行分组,然后创建一个字典,其中包含每个 grp 的键。

关于python - 拆分 Pandas DataFrame,其中一个因子列均匀分布在拆分中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59525273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com