#python #pandas
#python #pandas
Вопрос:
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 *’ (слева направо)
я ищу такой результат.
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
Комментарии:
1. Что вы пробовали до сих пор?
Ответ №1:
Используйте apply
с лямбда-функцией и index
наоборот lists
, это работает хорошо, потому что списки индексируются на основе 0 в python:
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
инструкции:
def f(x):
try:
return x[::-1].index('DePe*')
except ValueError:
return np.nan #or return 0
df['count'] = df['A'].apply(f)
Ответ №2:
Использование list.index
с reversed
:
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
Ответ №3:
Я новичок в python, поэтому это решение может быть не тем, что вы ищете. Но я думаю, что это работает:
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)
Комментарии:
1. Неважно, просто увидел, что были опубликованы другие ответы.