Заполните пустой столбец в соответствии с информацией из другого столбца с пандами - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь заполнить пустой столбец в соответствии с информацией из другого столбца

Мой фрейм данных

   A        B                                    C
0  F    House                     Are you at home?
1  E    House    description: to deliver tomorrow
2  F    Apt                 Here is some exemples 
3  F    House          description: a brown table
4  E    Apt               description: in the bus
5  F    House                 Hello, how are you?
6  E    Apt                     description: keys

Итак, я создаю столбец D, и еслистолбец C начинается с «description», я заполняю «fuzzy», если не с «buzzy».

new_column['D'] = ''

И я пытаюсь заполнить их

def fill_column(delete_column):
    if new_column['D'].loc[new_column['D'].str.startswith('description:'):
        new_column['D'] == 'fuzzy'
    else:
        new_column['D'] == 'buzzy'

    return new_column

Myвывод:

  File "<ipython-input-41-ec3c1407168c>", line 6
    else:
       ^
SyntaxError: invalid syntax

Хороший вывод:

   A        B                                   C       D
0  F    House                    Are you at home?   buzzy
1  E    House    description: to deliver tomorrow   fuzzy
2  F    Apt                 Here is some exemples   buzzy
3  F    House          description: a brown table   fuzzy
4  E    Apt               description: in the bus   fuzzy
5  F    House                 Hello, how are you?   buzzy
6  E    Apt                     description: keys   fuzzy

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Здесь вам не нужны if-else операторы, вы можете сделать это чисто в одну строку, используя np.where:

df['D'] = np.where(
    df['C'].str.startswith('description:'), 'fuzzy', 'buzzy')

Вы можете сделать это с помощью одного loc вызова, так какВы назначаете только два значения.

df['D'] = 'buzzy'
df.loc[df['C'].str.startswith('description:'), 'D'] = 'fuzzy'

Или используйте df.mask / df.where, как @jpp, предложенный в комментариях:

df['D'] = 'buzzy'
df['D'] = df['D'].mask(df['C'].str.startswith('description:'), 'fuzzy')

И, наконец, используя map:

m = {True: 'fuzzy', False: 'buzzy'}
df['D'] = df['C'].str.startswith('description:').map(m)

print(df)
   A      B                                 C      D
0  F  House                  Are you at home?  buzzy
1  E  House  description: to deliver tomorrow  fuzzy
2  F    Apt             Here is some exemples  buzzy
3  F  House        description: a brown table  fuzzy
4  E    Apt           description: in the bus  fuzzy
5  F  House               Hello, how are you?  buzzy
6  E    Apt                 description: keys  fuzzy
0 голосов
/ 14 декабря 2018
new_column.loc[new_column['C'].str.startswith('description:'), 'D'] = 'fuzzy'
new_column.loc[~new_column['C'].str.startswith('description:'), 'D'] = 'buzzy'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...