提问人:sxs 提问时间:6/19/2023 更新时间:6/19/2023 访问量:34
Pandas 使用列值对字符串进行切片
Pandas Slicing a String using a column value
问:
希望你能帮助解决这个问题。在上面的数据帧(Temp 列)中,我尝试提取破折号后的第二个值。我知道我可以使用 .split 或 .extract,但是我更喜欢使用使用切片的变量(在 DashPos 列中)。
我尝试转换为浮点数,然后是 int64 或 Int64,但无济于事。
我想使用 df['DashPos'] 中的值,即 df['SecondPos'] = df。Temp.str[df.DashPos:] 但是,这给出了错误切片索引必须是整数或无,或者具有索引方法。
任何帮助将不胜感激。数据帧和代码如下:
df = pd.DataFrame({
'Name':['Tom','Phil','Eric'],
'Alias':['T','P','E'],
'ID':[1,2,3],
'Age':[32,30,45],
'Temp':['100-200','200-300','200-300'],
'SSDashPos':[4,4,4]
})
df= df.astype({'Temp':'string'})
df['DashPos'] = df.Temp.str.find('-').add(1)
df['SecondPos'] = df.Temp.str[df.DashPos:]
非常感谢
史蒂文
答:
0赞
LioWal
6/19/2023
#1
一种方法是在 axis=1 上的 lambda 函数上使用 apply。
df['SecondPos'] = df.apply(lambda x:x.Temp[x.DashPos:],axis=1)
当在 axis=1 上使用 apply 方法时,该函数将接收对应于 Dataframe df 行的 pandas Series 作为输入。因此,对于每一行,lambda 函数采用列中的值,并根据列中存储的值应用切片。Temp
DashPos
有帮助吗?
评论
df['Temp'].apply(lambda x: x.split("-")[1])
df['SecondPos'] = [rangestr[spot:] for rangestr, spot in zip(df.Temp, df['DashPos'])]
df['SecondPos'] = df.Temp.str.partition('-').loc[:,2]