列中单词的逆序

2024-04-19 18:34:23 发布

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

我在python中有一个带有列的数据帧:

df
columnA
Apple Banana
Orange Citron Pineapple

如何根据空格保留子字符串的顺序?结果应该是:

columnA
Banana Apple
Pineapple Citron Orange

现在,我只使用:

df['columnA'] = df['columnA'].replace(r'(\s+).(\s+).(\s+)',r'\3\2\1',regex=True)

但这只在我知道子串的数目时有效,我不知道这个。你知道吗


Tags: 数据字符串trueappledf顺序replaceregex
2条回答

对于这个任务,我将使用列表理解,并避免使用str访问器

df['new'] = [' '.join(s.split()[::-1]) for s in df['columnA']]

df = pd.concat([df]*10000)
%timeit [' '.join(s.split()[::-1]) for s in df.col]
100 loops, best of 3: 12.9 ms per loop

%timeit df.col.str.split().apply(lambda x: ' '.join(x[::-1]))
10 loops, best of 3: 25.3 ms per loop

%timeit df.col.str.split().str[::-1].agg(' '.join)
10 loops, best of 3: 27.4 ms per loop

%timeit df.col.str.split().apply(reversed).apply(' '.join)
10 loop, best of 3: 28.7 ms per loop

您需要的三个步骤是:

  1. 分开绳子
  2. 反转字符串
  3. 连接字符串

第一步和第三步可以使用str.splitjoin实现,所以 你可以做:

 df.A.str.split().apply(lambda x: ' '.join(x[::-1]))

输出

0               Banana Apple
1    Pineapple Citron Orange
Name: A, dtype: object

另一种选择是使用reversed

df.A.str.split().apply(reversed).apply(' '.join)

相关问题 更多 >