在不同部分中对熊猫进行分组

时间:2018-12-03 16:23:54

标签: python pandas pandas-groupby

我有一个序列化的数据集,其内容用空格分隔,例如#a value1 #b value2 ....,其中带有#的第一个元素是列名,第二个是值。我的问题出现在此数据集的某些部分中,该部分的序列类似于“#%value1#%value2”,此特定标记表示具有多个值的列,这样,我需要一种机制来将多行转换为一个。例如。原始数据= #a value1 #b value2 #% value3 #% value4 #a value5 #b value6 #% value7 #% value8

分割后:

Key    value
#a.     Value1
#b.     Value2
#%.    Value3
#%.    Value4
#a.     Value5
#b.     Value6
#%.    Value7
#%.    Value8

但是我需要这个:

Key    value
    #a.     Value1
    #b.     Value2
    #%.    Value3,Value4
    #a.     Value5
    #b.     Value6
    #%.    Value7,Value8

如何通过使用熊猫来进行本地分组?一个细节是,这是一个巨大的数据集(约2Gb),我正在一台好的但正常的PC上运行所有这些数据。

1 个答案:

答案 0 :(得分:4)

首先使用shiftcumsum创建帮助键,然后它成为常规的groupbyjoin问题

s=(df.Key!=df.Key.shift()).cumsum()
df.groupby([df.Key,s]).value.apply(','.join).\
     sort_index(level=1).\
       reset_index(level=1,drop=True)
Out[788]: 
Key
#a.           Value1
#b.           Value2
#%.    Value3,Value4
#a.           Value5
#b.           Value6
#%.    Value7,Value8
Name: value, dtype: object