首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一个pandas函数来计算出现在特定单词之后的元素?

是否有一个pandas函数来计算出现在特定单词之后的元素?
EN

Stack Overflow用户
提问于 2019-04-08 16:42:09
回答 3查看 77关注 0票数 2
代码语言:javascript
复制
df
['ch*', 'co*', 'DePe*', 'DePe*', 'DePe*', 'pm*', 'tpm*', 'lep*']
['ch*', 'co*', 'DePe*', 'DePe*', 'DePe*', 'am*', 'te*', 'qe*','te*']
['ch*', 'co*', 'DePe*', 'ch*', 'DePe*', 'DePe*', 'tpm*', 'lep*']
['ch*', 'DePe*', 'eeae*', 'ps*', 'er*']
Name: df, Length: 4, dtype: object

我需要计算在'DePe*‘的最后一个实例(从左到右)之后发生的项目,我正在寻找这样的结果。

代码语言:javascript
复制
df                                                                    count
['ch*', 'co*', 'DePe*', 'DePe*', 'DePe*', 'pm*', 'tpm*', 'lep*']      3
['ch*', 'co*', 'DePe*', 'DePe*', 'DePe*', 'am*', 'te*', 'qe*','te*']  4
['ch*', 'co*', 'DePe*', 'ch*', 'DePe*', 'DePe*', 'tpm*', 'lep*']      2
['ch*', 'DePe*', 'eeae*', 'ps*', 'er*']                               3
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-08 16:51:10

使用带有lambda函数的apply和反向listsindex,它工作得很好,因为在python中列表是从0开始索引的:

代码语言:javascript
复制
df['count'] = df['A'].apply(lambda x: x[::-1].index('DePe*'))
print (df)

                                                   A  count
0   [ch*, co*, DePe*, DePe*, DePe*, pm*, tpm*, lep*]      3
1  [ch*, co*, DePe*, DePe*, DePe*, am*, te*, qe*,...      4
2   [ch*, co*, DePe*, ch*, DePe*, DePe*, tpm*, lep*]      2
3                      [ch*, DePe*, eeae*, ps*, er*]      3

如果可能,可以在try-except语句中指定不存在某些值:

代码语言:javascript
复制
def f(x):
    try:
        return x[::-1].index('DePe*')
    except ValueError:
        return np.nan #or return 0

df['count'] = df['A'].apply(f)
票数 2
EN

Stack Overflow用户

发布于 2019-04-08 16:49:47

reversed中使用list.index

代码语言:javascript
复制
my_df['count'] = [list(reversed(l)).index('DePe*') for l in my_df['df']]

                                                  df  count
0   [ch*, co*, DePe*, DePe*, DePe*, pm*, tpm*, lep*]      3
1  [ch*, co*, DePe*, DePe*, DePe*, am*, te*, qe*,...      4
2   [ch*, co*, DePe*, ch*, DePe*, DePe*, tpm*, lep*]      2
3                      [ch*, DePe*, eeae*, ps*, er*]      3
票数 1
EN

Stack Overflow用户

发布于 2019-04-08 16:56:33

我是python的新手,所以这个解决方案可能不是你想要的。但我认为这是可行的:

代码语言:javascript
复制
l1 = ['ch*', 'co*', 'DePe*', 'DePe*', 'DePe*', 'pm*', 'tpm*', 'lep*']
count=0
for x in l1:
    if x == 'DePe*':
        count=0
    else:
        count+=1
print (count)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55569369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档