大熊猫:按相邻行将数据框转换为数据框列表

时间:2018-08-22 15:20:38

标签: python pandas pandas-groupby

转换此数据框:

    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不喜欢字符串。

3 个答案:

答案 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 将是所有数据框的最终列表