python-将行拆分为新行,并从其他列中添加相应的匹配值

我有一个像下面的数据农场

  data = pd.DataFrame({'Name': ['CTA15;CTA16;CAR;', 'AC007;AC008;GOO7;G008;F009', 'AC09;BC09;C09;V09;B0P', 'UF09;GF09;HF09;MN08'],  
    'Sample':['JAK_1', 'TOR2', 'Gilo', 'ALR']})
data

                Name    Sample
0   CTA15;CTA16;CAR;           JAK_1
1   AC007;AC008;GOO7;G008;F009  TOR2
2   AC09;BC09;C09;V09;B0P       Gilo
3   UF09;GF09;HF09;MN08         ALR

我需要将Name列拆分为一个新行,并在Sample列中相应地添加值.最后,我的目标是拥有一个像这样的数据框,

    Name    Sample
0   CTA15   JAK_1
1   CTA16   JAK_1
2   CAR JAK_1
3   AC007   TOR2
4   AC008   TOR2
5   GOO7    TOR2
6   G008    TOR2
7   F009    TOR2
8   AC09    Gilo
9   BC09    Gilo
10  C09 Gilo
11  V09 Gilo
12  B0P Gilo
13  UF09    ALR
14  GF09    ALR
15  HF09    ALR
16  MN08    ALR

我需要用’;’分开进入新行,并将“样本”列中的值分别添加到每个行中.

解决方法:

您可以使用str.strip进行删除;在某些字符串的末尾开始,列表为str.split,然后为它们的长度为len.

最后由构造函数使用numpy.repeatnumpy.concatenate创建新的DataFrame:

vals = data['Name'].str.strip(';').str.split(';')
l = vals.str.len()
df = pd.DataFrame({'Sample':np.repeat(data['Sample'].values, l), 
                   'Name':np.concatenate(vals.values)})
print (df)
     Name Sample
0   CTA15  JAK_1
1   CTA16  JAK_1
2     CAR  JAK_1
3   AC007   TOR2
4   AC008   TOR2
5    GOO7   TOR2
6    G008   TOR2
7    F009   TOR2
8    AC09   Gilo
9    BC09   Gilo
10    C09   Gilo
11    V09   Gilo
12    B0P   Gilo
13   UF09    ALR
14   GF09    ALR
15   HF09    ALR
16   MN08    ALR

替代解决方案:

df = data.join(data.pop('Name')
                   .str.strip(';')
                   .str.split(';', expand=True)
                   .stack()
                   .reset_index(level=1, drop=True)
                   .rename('Name')).reset_index(drop=True)
print (df)
   Sample   Name
0   JAK_1  CTA15
1   JAK_1  CTA16
2   JAK_1    CAR
3    TOR2  AC007
4    TOR2  AC008
5    TOR2   GOO7
6    TOR2   G008
7    TOR2   F009
8    Gilo   AC09
9    Gilo   BC09
10   Gilo    C09
11   Gilo    V09
12   Gilo    B0P
13    ALR   UF09
14    ALR   GF09
15    ALR   HF09
16    ALR   MN08

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...