特定爆炸列

问题描述 投票:3回答:1

我有这样的数据集:

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')

现在不知道如何继续。我很高兴您的评论

python pandas
1个回答
0
投票

您可以使用str.split,然后使用applyexplode功能,如下所示

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()

0
投票

用途:

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
© www.soinside.com 2019 - 2024. All rights reserved.