Pandas在两列中操纵字符串

时间:2016-10-07 21:42:15

标签: string pandas

这是我的数据框:

           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

我可以通过s = std::string(x); 遍历每一行并得到我需要的东西,但它很慢,我想知道是否有更快的方法。

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:3)

使用strsplit

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

enter image description here

您可以进一步扩展

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

enter image description here