在python中为每个唯一ID切片数据

时间:2016-11-18 21:25:54

标签: python loops pandas slice

id       val
a         1
a         1
a         2  
a         2
a         1
a         2
a         2
b         1 
b         1
b         2 
b         2 
b         1
b         1
b         2
b         2 
b         3

我正在尝试根据id的长度对每个val的数据进行切片。我希望每4行切片数据

对于标识a,数据切片的索引值为[0,4] 对于标识b,数据切片的索引值为[7,11,15]

我可以为每个索引的入站和出站值手动执行此操作

例如

 df2=df[0:3]
 remaining code

 df2a=df[4:6]
 remaining code

 df2b = df2.append(df2a, ignore_index=True)     

我知道这不是一个好的编程习惯,因为我仍然是python的新手,我需要你的帮助来通过循环来简化这个。我的数据框中有超过百万条记录。

1 个答案:

答案 0 :(得分:1)

您可以创建一个subgroup变量,表示每四行不同的一个组,然后您可以按idsubgroups变量进行分组,并分别对每个组进行分析:

df['subgroups'] = df.groupby('id').cumcount() // 4

for _, g in df.groupby(['id', 'subgroups']):
    print(g)

#  id  val  subgroups
#0  a    1          0
#1  a    1          0
#2  a    2          0
#3  a    2          0

#  id  val  subgroups
#4  a    1          1
#5  a    2          1
#6  a    2          1

#   id  val  subgroups
#7   b    1          0
#8   b    1          0
#9   b    2          0
#10  b    2          0

#   id  val  subgroups
#11  b    1          1
#12  b    1          1
#13  b    2          1
#14  b    2          1

#   id  val  subgroups
#15  b    3          2