转换此数据框:
A B C
0 '1' '2' '3'
1 '1' '4' '5'
2 '2' '6' '7'
3 '2' '8' '9'
4 '1' '0' '1'
5 '2' '2' '3'
进入此数据帧列表:
A B C
0 '1' '2' '3'
1 '1' '4' '5'
A B C
2 '2' '6' '7'
3 '2' '8' '9'
A B C
4 '1' '0' '1'
A B C
5 '2' '2' '3'
,以使同一A组的所有相邻行在其自己的数据帧中在一起。我已经尝试了groupby和drop_duplicates的各种组合,但是这些并没有处理行的连续性质。而且diff不喜欢字符串。
答案 0 :(得分:3)
数据:
$ supervisord -c /path/to/supervisord.conf
将A中的连续变化总和分组为不等于0:
data = StringIO("""
A B C
1 2 3
1 4 5
2 6 7
2 8 9
1 0 1
2 2 3
""")
答案 1 :(得分:1)
使用numpy.flatnonzero
查找差异不为零的位置,然后numpy.split
拆分数据帧。
a = df.A.values
lodf = np.split(df, np.flatnonzero(a[:-1] != a[1:]) + 1)
print(*lodf, sep='\n\n')
A B C
0 1 2 3
1 1 4 5
A B C
2 2 6 7
3 2 8 9
A B C
4 1 0 1
A B C
5 2 2 3
答案 2 :(得分:0)
我想提出一些简单的编码解决方案,而不是可能无法有效记忆(或者也可能是时间)的公认答案
all_df=[]
j=0
for i in range(1,df.shape[0]):
if (df['A'][i]==df['A'][i-1]):
continue
all_df.append(df[j:i])
j=i
all_df.append(df[j:])
它将适用于任何类型的数据。 all_df 将是所有数据框的最终列表