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