ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-11 05:05:18  阅读:184  来源: 互联网

标签:pandas dataframe 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,dataframe,python
来源: https://codeday.me/bug/20191111/2017771.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有