Найдите строку в записи в кадре и скопируйте ее на python - PullRequest
0 голосов
/ 04 июня 2018

У меня есть фрейм данных, содержащий 3 столбца

Он состоит из трех столбцов, скажем, A, B, C

Я хочу искать определенную строку скажем 'яблоко' во всех строках столбца A, и если конкретная строка содержит строку' apple ', я хочу скопировать ее в новый столбец D - чтобы для той же строки столбец Dсодержит слово 'apple'

Я пытался использовать цикл for, например:

for i in range(16):
    if df.iat[i,1].str.contains('apple').any():
         df.iat[i,2] = 'apple'

, но он возвращает мне ошибку: объект 'str' не имеет атрибута 'str'

Я попробовал несколько других подходов, но не мог понять, как перебирать определенные строки

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Аналогичен ответу @ coldspeed, но немного проще и работает с несколькими различными элементами:

import pandas as pd

df = pd.DataFrame(
    dict(Name=['apple', 'banana', 'cherry', 'apple', 'banana', 'orange'],
         Value=[1, 2, 3, 4, 5, 6])
)

m = df.Name.apply(
    lambda x: x in ['apple', 'orange']
)
df.loc[m, 'NEW'] = df.loc[m, 'Name']

#df
    Name    Value   NEW
0   apple   1   apple
1   banana  2   NaN
2   cherry  3   NaN
3   apple   4   apple
4   banana  5   NaN
5   orange  6   orange

Этот подход также работает с подстроками:

lambda x: 'app' in x or 'oran' in x
0 голосов
/ 04 июня 2018

Настройка

df
     NAME  VALUE
0   apple      6
1  banana      3
2  cherry      7
3   apple      2
4  banana      5
5  cherry      3

Решение

Полные проверки -

df.loc[df.eq('apple').any(axis=1), 'NEW'] = 'apple'

В качестве альтернативы для проверок подстроки -

m = df.select_dtypes(object).apply(
    lambda x: x.str.contains('apple')).any(axis=1)
df.loc[m, 'NEW'] = 'apple' 

df

     NAME  VALUE    NEW
0   apple      6  apple
1  banana      3    NaN
2  cherry      7    NaN
3   apple      2  apple
4  banana      5    NaN
5  cherry      3    NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...