gpt4 book ai didi

python - 分割pandas数据框的有效方法

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

我有一个包含超过一百万条记录的大型数据框。我想根据客户 ID 将这个数据帧分成四个 block ,所以我尝试了以下脚本。

unique_customer=df['Customer'].unique()
n=len(unique_customer)

a=n/4
s1=a
s2=s1+a
s3=s2+a
s4=n

l1= unique_customer[:s1]
l2= unique_customer[s1:s2]
l3= unique_customer[s2:s3]
l4= unique_customer[s3:s4]

df1=df[df['Customer'].isin(l1)]
df2=df[df['Customer'].isin(l2)]
df3=df[df['Customer'].isin(l3)]
df4=df[df['Customer'].isin(l4)]

它适用于较小的数据集。但对于大数据集来说需要很长时间。有没有其他方法可以解决这个问题?

示例数据:输入:

   Customer  val1
0 a1 112
1 a2 2
2 a1 11
3 a3 154
4 a4 76
5 a5 12
6 a2 6
7 a4 7
8 a6 33
9 a5 67
10 a3 121
11 a5 21
12 a5 77
13 a4 3
14 a7 21
15 a5 65
16 a6 98
17 a8 45
18 a9 12

输出:df1

  Customer  val1
0 a1 112
1 a2 2
2 a1 11
6 a2 6

df2

   Customer  val1
3 a3 154
4 a4 76
7 a4 7
10 a3 121
13 a4 3

df3

   Customer  val1
5 a5 12
8 a6 33
9 a5 67
11 a5 21
12 a5 77
15 a5 65
16 a6 98

df4

   Customer  val1
14 a7 21
17 a8 45
18 a9 12

最佳答案

由于您没有提供数据,我将尝试给您一个我尚未测试过的答案。

groups = df.groupby('Customer').ngroup() % 4
df1, df2, df3, df4 = (g for _, g in df.groupby(groups))

尽管上述方法有效,但为了匹配您的输出,我必须在 np.arange 上对唯一数量的组使用 pd.qcut

f, u = pd.factorize(df['Customer'])
q, b = pd.qcut(np.arange(len(u)), 4, retbins=True)
b[-1] += 1
groups = pd.cut(f, b, labels=False, right=False)
df1, df2, df3, df4 = (g for _, g in df.groupby(groups))

print(df1, df2, df3, df4, sep='\n'*2)

Customer val1
0 a1 112
1 a2 2
2 a1 11
6 a2 6

Customer val1
3 a3 154
4 a4 76
7 a4 7
10 a3 121
13 a4 3

Customer val1
5 a5 12
8 a6 33
9 a5 67
11 a5 21
12 a5 77
15 a5 65
16 a6 98

Customer val1
14 a7 21
17 a8 45
18 a9 12

关于python - 分割pandas数据框的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49292383/

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