从pandas数据帧列中提取多个单词到同一列中

2024-06-28 19:01:49 发布

您现在位置:Python中文网/ 问答频道 /正文

假设一个数据帧由两列a={1,2,3}B={'abcdd','efghh','ijkl'}。对于A=2,我想将B列中的相应条目改为“efh”。(即提取第一个、第二个和最后一个单词,不删除第三个单词,不相同)。在

使用航向位置[df['colA']=2,'colB']。结构分裂().str[x],其中x=0,1和-1,但我很难有效地将这三个单词连接回一个字符串中。我能想到的最有效的方法如下。有没有更好的方法来实现我的目标?谢谢。在

y = lambda x : df.loc[df['colA']==2,'colB'].str.split().str[x]
df.loc[df['colA']=2,'colB'] = y(0) + ' ' + y(1) + ' ' + y(-1)

预期和实际结果:

^{pr2}$

Tags: 数据方法df条目单词结构locstr
2条回答

您已经非常接近解决方案了,唯一的问题是str[x]返回一个包装在Series对象中的值。可以通过从序列中提取值来解决此问题,如下所示:

y = lambda x : df.loc[df['colA']==2,'colB'].str.split().str[x].values[0]
df.loc[df['colA']==2,'colB'] = y(0) + ' ' + y(1) + ' ' + y(-1)

您也可以通过使用apply函数来实现相同的目的

^{pr2}$

这个怎么样:

df = pd.DataFrame(data = {'A': [1,2,3], 
                          'B': ['a b c d', 'e f g h', 'i j k l']})

y = lambda x : df.loc[df['A']==2,'B'].str[0:2*x+2] + df.loc[df['A']==2,'B'].str[-1]
df.loc[df1['A']==2,'B'] = y(1)

那么df就是通缉犯:

^{pr2}$

相关问题 更多 >