我有一些包含客户明智数据的销售数据。客户的所有购买都存储在一行中,如下所示。我正在尝试创建一个新列,其中将每个客户购买的所有产品都列在一行中,并用逗号隔开
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,
答案 0 :(得分:2)
如果可能,将Series.str.findall
与Series.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