Создайте несколько операторов if и функцию для замены значений в столбцах. - PullRequest
0 голосов
/ 25 апреля 2020

Я работаю с большим набором данных, но для упрощения я буду использовать более простой пример (некоторые строки которого были удалены для очистки набора данных), чтобы проиллюстрировать проблему. Представьте, что у меня есть этот набор данных:

    Code_0  Code_1  Code_3  Code_4  Code_5 Code_6 Code_7
3     1        1       3       0        0    1      1 
9     0        0       0       0        0    0      1
10    4        2       3       1        1    0      0
15    0        3       0       5        1    1      1 

Итак, что я хочу сделать в каждой строке: если Code_5 равен единице, а code_0 больше 0, то к code_0 будет добавлена ​​единица. С другой стороны, если code_6 == 1 и code_1 больше 0, то к code_1 будет добавлена ​​единица. Наконец, если code_7 == 1 и code_3 больше 0, то к code_3 будет добавлено 1. Поэтому я хочу получить следующее:

    Code_0  Code_1  Code_3  Code_4  Code_5 Code_6 Code_7
3     1        2       4       0        0    1      1 
9     0        0       0       0        0    0      1
10    5        2       3       1        1    0      0
15    0        4       0       5        1    1      1 

Я сделал этот код, но он не работает. Во всяком случае, я думаю, что, возможно, есть лучший вариант.

def add_one(x):
    if x == df_data['Code_5']:
        if x == 1 and df_data['Code_0'] > 0:
            df_data['Code_0'] = df_data['Code_0'] + 1
    if x == df_data['Code_6']:
        if x == 1 and df_data['Code_1'] > 0:
            df_data['Code_1'] = df_data['Code_1'] + 1  
    if x == df_data['Code_7']:
        if x == 1 and df_data['Code_2'] > 0:
            df_data['Code_2'] = df_data['Code_2'] + 1

df_data['Code_0'] = df_data['Code_5'].apply(add_one)
df_data['Code_1'] = df_data['Code_6'].apply(add_one)
df_data['Code_2'] = df_data['Code_7'].apply(add_one)

Кто-нибудь может мне помочь, пожалуйста?

1 Ответ

0 голосов
/ 25 апреля 2020

Вы можете упростить, пропустив всю строку:

In [163]: def add_one(row):
     ...:     if row['Code_5'] == 1 and row['Code_0'] > 0:
     ...:         row['Code_0'] = row['Code_0'] + 1
     ...:     if row['Code_6'] == 1 and row['Code_1'] > 0:
     ...:         row['Code_1'] = row['Code_1'] + 1
     ...:     if row['Code_7'] == 1 and row['Code_2'] > 0:
     ...:         row['Code_2'] = row['Code_2'] + 1
     ...:     return row
     ...:

In [164]: add_one
Out[164]: <function __main__.add_one(row)>

In [165]: df =df.apply(lambda x: add_one(x), axis=1)

axis =1 это указать столбцы

...