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的新手,我需要你的帮助来通过循环来简化这个。我的数据框中有超过百万条记录。
答案 0 :(得分:1)
您可以创建一个subgroup
变量,表示每四行不同的一个组,然后您可以按id
和subgroups
变量进行分组,并分别对每个组进行分析:
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