我有一个序列化的数据集,其内容用空格分隔,例如#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上运行所有这些数据。
答案 0 :(得分:4)
首先使用shift
和cumsum
创建帮助键,然后它成为常规的groupby
和join
问题
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