我有这样的数据集:
data = {'id': ['1','2'],
'seq': ['1, 2, 001','2, 5, 4, 5, 8, 009']}
new_df = pd.DataFrame(data)
输出:
id seq
0 1 1, 2, 001
1 2 2, 5, 4, 5, 8, 009
我想得到:
new_data = {'id': ['1', '1','2','2','2','2','2'],
'seq': ['1, 001','1, 2, 001','2, 009','2, 5, 009','2, 5, 4, 009','2, 5, 4, 5, 009','2, 5, 4, 5, 8, 009']}
new_df = pd.DataFrame(new_data)
输出:
id seq
0 1 1, 001
1 1 1, 2, 001
2 2 2, 009
3 2 2, 5, 009
4 2 2, 5, 4, 009
5 2 2, 5, 4, 5, 009
6 2 2, 5, 4, 5, 8, 009
我从爆炸开始:
df.assign(seq=df.seq.str.split(',\s*')).explode('seq')
现在不知道如何继续。我很高兴您的评论
您可以使用str.split
,然后使用apply
和explode
功能,如下所示
data = {'id': ['1','2'],
'seq': ['1, 2, 001','2, 5, 4, 5, 8, 009']}
new_df = pd.DataFrame(data)
new_df.seq.str.split(",").apply(lambda arr: [arr[:i] + arr[-1:] for i in range(1,len(arr))] ).explode()
用途:
a=[[', '.join(x[:i]+[x[-1]]) for i,y in enumerate(x[:-1],1)] for x in df.seq.str.split(',\s*')]
df = df.assign(seq=a).explode('seq')
print (df)
id seq
0 1 1, 001
0 1 1, 2, 001
1 2 2, 009
1 2 2, 5, 009
1 2 2, 5, 4, 009
1 2 2, 5, 4, 5, 009
1 2 2, 5, 4, 5, 8, 009