熊猫-在常用词后提取特定文本

时间:2020-02-06 06:22:41

标签: regex pandas

我有一些包含客户明智数据的销售数据。客户的所有购买都存储在一行中,如下所示。我正在尝试创建一个新列,其中将每个客户购买的所有产品都列在一行中,并用逗号隔开

id, value
101, day:day_1\nproducts:abc\nday:day_2\nproducts:xyz\nday:day_3\nproducts:def
102, day:day_1\nproducts:prod_1\nday:day_4\nproducts:prod_2
103, \n

尝试将以上数据转换为以下格式:

id,value
101,abc,xyz,def
102,prod_1,prod_2
103,

1 个答案:

答案 0 :(得分:2)

如果可能,将Series.str.findallSeries.str.join一起使用:

df['value'] = df['value'].str.findall('products:(.+)').str.join(',')
print (df)
    id          value
0  101    abc,xyz,def
1  102  prod_1,prod_2
2  103               

或者在列表理解中使用split的解决方案:

L = [','.join(y.split(":")[1] for y in v.split("\n") if ('products' in y))
     if pd.notna(v) and (':' in v) and ('\n' in v) 
     else ''
     for v in df['value']]

df1 = df[['id']].join(pd.DataFrame(L, index=df.index, columns=['value']))
print (df1)
    id          value
0  101    abc,xyz,def
1  102  prod_1,prod_2
2  103