从pandas数据框中的所有行中提取子字符串

时间:2018-05-21 16:18:35

标签: python pandas

我有一个pd.DataFrame,如下所示:

pd.DataFrame(["SSDILFJKSIDHFKJSHDKUFH", "SLIDFSOIUDHFIUSDHF", "K<NFSKJGHSDUFSDK"], ["SKDJF", "FDKSJFSSDF", "SIDFDS"])

我想从第一列中提取子序列,但我想要的子序列的长度取决于第二列中序列的长度。我想从col1中的第二个字符中提取字符到col1中的第n个字符,其中n被定义为col2中相应字符串中的字符数。

如何做到这一点?

2 个答案:

答案 0 :(得分:2)

这是使用列表理解的一种方式:

df = pd.DataFrame({'A': ["SSDILFJKSIDHFKJSHDKUFH", "SLIDFSOIUDHFIUSDHF",
                         "K<NFSKJGHSDUFSDK"]},
                  index=["SKDJF", "FDKSJFSSDF", "SIDFDS"])

df['B'] = [j[1:i+1] for i, j in zip(s.index.map(len), s.values)]

print(df)

                                 A           B
SKDJF       SSDILFJKSIDHFKJSHDKUFH       SDILF
FDKSJFSSDF      SLIDFSOIUDHFIUSDHF  LIDFSOIUDH
SIDFDS            K<NFSKJGHSDUFSDK      <NFSKJ

答案 1 :(得分:1)

您可以尝试使用apply

df
Out[115]: 
        index                       0
0       SKDJF  SSDILFJKSIDHFKJSHDKUFH
1  FDKSJFSSDF      SLIDFSOIUDHFIUSDHF
2      SIDFDS        K<NFSKJGHSDUFSDK
df.apply(lambda x : x[0][len(x['index'])],axis=1)
Out[116]: 
0    F
1    H
2    J
dtype: object

或仅使用python

[y[len(x)]for x,y in zip(df['index'],df[0])]
Out[117]: ['F', 'H', 'J']