我正在尝试将数据集中在pandas中,而groupby适用于大多数问题,我很难找到分组集群的解决方案。
给定一个数据框,例如
df = pd.DataFrame({'x': [1,2,3,4,5], 'y':[1,4,9,16,25], 'valid':[0,1,1,0,1]})
for value, group in df.groupby(by='valid'):
print(value)
print(group)
这允许将数据分成两组:
valid x y
0 0 1 1
3 0 4 16
valid x y
1 1 2 4
2 1 3 9
4 1 5 25
我如何修改它以获得三个不同的组,其中组由“有效”列的连续范围确定? E.g:
valid x y
0 0 1 1
valid x y
3 0 4 16
valid x y
1 1 2 4
2 1 3 9
valid x y
4 1 5 25
Pandas中是否存在类似群组的内容?
答案 0 :(得分:1)
将shift
d列与ne
!=
进行比较,并为连续组Series
添加cumsum
:
for value, group in df.groupby(df['valid'].ne(df['valid'].shift()).cumsum()):
print(value)
print(group)
1
valid x y
0 0 1 1
2
valid x y
1 1 2 4
2 1 3 9
3
valid x y
3 0 4 16
4
valid x y
4 1 5 25
<强>详细强>:
print(df['valid'].ne(df['valid'].shift()).cumsum())
0 1
1 2
2 2
3 3
4 4
Name: valid, dtype: int32