Панды заменяют первый результат в кадре данных - PullRequest
0 голосов
/ 27 августа 2018

Допустим, у меня есть кадр данных, который выглядит следующим образом:

df4

df4 = pd.DataFrame({'Q':['apple', 'apple', 'orange', 'Apple', 'orange'], 'R':['a.txt', 'a.txt', 'a.txt', 'b.txt', 'b.txt']})

>>> df4



        Q      R
0   apple  a.txt
1   apple  a.txt
2  orange  a.txt
3   Apple  b.txt
4  orange  b.txt

Я хотел бы вывести следующее:

            Q      R
0   breakfast  a.txt
1       apple  a.txt
2      orange  a.txt
3   breakfast  b.txt
4      orange  b.txt

Другими словами, без учета регистра я хочучтобы найти каждую строку в кадре данных, найти первое вхождение определенных слов (в данном случае это слово «яблоко») и заменить его другим словом.

Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Я просто очень хотел ответить на этот вопрос.

def swap_first(s):
  swap = 1
  luk4 = {'apple'}
  for x in s:
    if x.lower() in luk4 and swap:
      yield 'breakfast'
      swap ^= 1
    else:
      yield x
      if x not in luk4:
        swap ^= 1

df4.assign(Q=[*swap_first(df4.Q)])

           Q      R
0  breakfast  a.txt
1      apple  a.txt
2     orange  a.txt
3  breakfast  b.txt
4     orange  b.txt
0 голосов
/ 27 августа 2018

Вот векторизованное решение с groupby и idxmin:

v = df.Q.str.lower().eq('apple')    
v2 = (~v).cumsum().where(v)
df.loc[v2.groupby(v2).idxmin().values, 'Q'] = 'breakfast'

df
           Q      R
0  breakfast  a.txt
1      apple  a.txt
2     orange  a.txt
3  breakfast  b.txt
4     orange  b.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...