数据帧:具有不连续列的组

时间:2017-01-23 14:44:49

标签: python apache-spark dataframe apache-spark-sql

我正在研究如下的数据框,我想将每个连续部分与其他部分分开。这意味着,每个零点差异都会分开。将与最后一个同名的非零项目分组。结果应该是:group1:('E', (1,2,3));第2组:('E',(4,5)); group3:('C',(1,2))

我该怎么做?非常感谢!

+----+----+------------+
|name|diff|num_in_group|
+----+----+------------+
|   E|null|           1|
|   E|   0|           2|
|   E|   0|           3|
|   E|  40|           4|
|   E|   0|           5|
|   C|null|           1|
|   C|   0|           2|
+----+----+------------+

1 个答案:

答案 0 :(得分:0)

dic_group = {}

new_group = True

counter = 0

for index in df.index:

    if new_group == False:

        if df.loc[index, 'diff'] == 0: 

            dic_group[ref_name]['numbers_in_group'].append(df.loc[index, 'num_in_group'])

        else:

            new_group = True

    if new_group:

        counter = counter + 1

        ref_name = 'group%d' %counter

        dic_group[ref_name]={}

        dic_group[ref_name]['name'] = df.loc[index, 'name']

        dic_group[ref_name]['numbers_in_group'] = []

        dic_group[ref_name]['numbers_in_group'].append(df.loc[index, 'num_in_group'])

        new_group = False

输出:

{'group1': {'name': 'E', 'numbers_in_group': [1, 2, 3]},
 'group2': {'name': 'E', 'numbers_in_group': [4, 5]},
 'group3': {'name': 'C', 'numbers_in_group': [1, 2]}}