Pandas 使用列值对字符串进行切片

Pandas Slicing a String using a column value

提问人:sxs 提问时间:6/19/2023 更新时间:6/19/2023 访问量:34

问:

希望你能帮助解决这个问题。在上面的数据帧(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:]

非常感谢

史蒂文

Python Pandas 数据帧 切片

评论

0赞 Carbon 6/19/2023
而且你绝对确定你不想要?df['Temp'].apply(lambda x: x.split("-")[1])
0赞 Carbon 6/19/2023
这是您可以做到的一种方法,但我会在这里使用应用:df['SecondPos'] = [rangestr[spot:] for rangestr, spot in zip(df.Temp, df['DashPos'])]
0赞 Carbon 6/19/2023
你也可以做df['SecondPos'] = df.Temp.str.partition('-').loc[:,2]

答:

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 函数采用列中的值,并根据列中存储的值应用切片。TempDashPos

有帮助吗?