【问题标题】:Pandas manipulating strings in two columns熊猫在两列中操作字符串
【发布时间】:2017-02-16 23:33:58
【问题描述】:

这是我的数据框:

           A                B
0   asdf|afsdf|fasd    sdsd|wer|wer
1   sdfsdf             sdfsdff
2   sdf|s              sdfsde|sdf

我想形成列C,它将包含从列A和列B到第一个|的连接值,如果|不存在,那么它将简单地连接两列.另外在连接时我想插入-- 这是C 列的外观:

         C
0   asdf--sdsd
1   sdfsdf--sdfsdff
2   sdf--sdfsde

我可以用df.loc 遍历每一行并得到我需要的东西,但是速度很慢,我想知道是否有更快的方法。

【问题讨论】:

    标签: string pandas


    【解决方案1】:

    可能有一种更奇特的方式,但这是可行的:

    In [1]: import pandas as pd
    
    In [2]: d = {'A': ('asdf|afsdf|fasd', 'sdfsdf', 'sdf|s'),
                 'B': ('sdsd|wer|wer', 'sdfsdff', 'sdfsde|sdf')}
    
    In [3]: data = pd.DataFrame(d)
    
    In [4]: data['C'] = data['A'].str.split('|').str.get(0) + "--" + data['B'].str.split('|').str.get(0)
    
    In [5]: data
    Out[5]: 
                     A             B                 C
    0  asdf|afsdf|fasd  sdsd|wer|wer       asdf--sdsd
    1           sdfsdf       sdfsdff  sdfsdf--sdfsdff
    2            sdf|s    sdfsde|sdf      sdf--sdfsde
    

    pandas 中使用字符串的参考可以在their documentation 中找到。

    【讨论】:

      【解决方案2】:

      使用strsplit 的简答题

      df['C'] = df.A.str.split('|').str.get(0).add('--') \
              + df.B.str.split('|').str.get(0)
      df
      


      您可以进一步扩展它

      df['C'] = df.A.str.split('|', expand=True).stack() \
          .add('--').add(df.B.str.split('|', expand=True).stack()) \
          .groupby(level=0).apply('|'.join)
      df
      

      【讨论】:

        猜你喜欢
        • 2021-12-14
        • 2015-05-18
        • 2012-08-05
        • 2018-08-08
        相关资源
        最近更新 更多