我有一个带有颜色列的数据框,其中包含字符串“ Red”或“ Blue”。每当“颜色”列等于“蓝色”时是否可以拆分数据帧。请在下面找到示例数据帧和所需的输出。 DF是初始数据帧。 Res1,Res2,Res3是我想要的。预先感谢。
df:
Colour
0 Red
1 Red
2 Red
3 Blue
4 Red
5 Blue
6 Red
7 Red
8 Red
9 Red
10 Blue
res1:
Colour
0 Red
1 Red
2 Red
3 Blue
res2:
Colour
0 Red
1 Blue
res3:
Colour
0 Red
1 Red
2 Red
3 Red
4 Blue
答案 0 :(得分:1)
我们可以尝试cumsum
颠倒顺序
s = df.Colour.eq('Blue').iloc[::-1].cumsum()
d = dict(tuple(df.groupby(s)))
d[1]
Out[89]:
Colour
6 Red
7 Red
8 Red
9 Red
10 Blue
答案 1 :(得分:1)
我们可以在groupby()
上进行cumsum
。由于您希望标记Blue
结尾,因此我们需要进行移位:
for i, d in df.groupby(df['Colour'].shift().eq('Blue').cumsum()):
print(d)
最好使用字典将其存储在数据结构中:
d = {k:d for k,d in df.groupby(df['Colour'].shift().eq('Blue').cumsum())}
和d[0]
给出:
Colour
0 Red
1 Red
2 Red
3 Blue