Pandas 另一列中的子字符串列

Pandas 另一列中的子字符串列,pandas,Pandas,我试图根据另一列的长度对一列进行子串,但结果集是NaN。我做错了什么 import pandas as pd df = pd.DataFrame([['abcdefghi','xyz'], ['abcdefghi', 'z']], columns=['col1', 'col2']) df.col1.str[:df.col2.str.len()] 0 NaN 1 NaN Name: col1, dtype: float64 以下是我所期待的: 0 'abc' 1 'a

我试图根据另一列的长度对一列进行子串,但结果集是
NaN
。我做错了什么

import pandas as pd 
df = pd.DataFrame([['abcdefghi','xyz'], ['abcdefghi', 'z']], columns=['col1', 'col2'])  

df.col1.str[:df.col2.str.len()] 

0   NaN
1   NaN
Name: col1, dtype: float64
以下是我所期待的:

0   'abc'
1   'a'

我不认为字符串索引需要一个系列。我会做一个列表:

df['extract'] = [r.col1[:len(r.col2)] for _,r in df.iterrows()]

输出:

        col1 col2 extract
0  abcdefghi  xyz     abc
1  abcdefghi    z       a

使用numpy并将数组转换为
pd.Series

def slicer(start=None, stop=None, step=1):
    return np.vectorize(lambda x: x[start:stop:step], otypes=[str])


df["new_str"] = pd.Series(
    [slicer(0, i)(c) for i, c in zip(df["col2"].apply(len), df["col1"].values)]
)

print(df)

        col1 col2 new_str
0  abcdefghi  xyz     abc
1  abcdefghi    z       a

以下是使用lambda的解决方案:

df['new'] = df.apply(lambda row: row['col1'][0:len(row['col2'])], axis=1)
结果:

        col1 col2  new
0  abcdefghi  xyz  abc
1  abcdefghi    z    a
        col1 col2  new
0  abcdefghi  xyz  abc
1  abcdefghi    z    a