Несколько результатов оператора If-else - PullRequest
0 голосов
/ 06 сентября 2018

Как настроить оператор if для нескольких ответов, а не для условий?

Итак, для моего примера я хочу сказать, что если i равно 0, то a и b будут иметь уникальные ответы.

df is a dataframe something like:

0 d 8
0 d 9
0 t 7
1 q 7
0 u 8
0 r 5
1 s 3

for c in range(len(df.index)):
    for i in df.iloc[[c]],0]:
        if i == 0:
            a = 12
            b = 'up'
OUT.write('%i,%s,'%(a,b))

ошибка: NameError: имя 'a' не определено

Я пытался:

for c in range(len(df.index)):
    for i in df.iloc[[c]],0]:
        if i == 0:
            a = 12; b = 'up'

и

for c in range(len(df.index)):
    for i in df.iloc[[c]],0]:
        if i == 0:
            a = 12 and b = 'up'

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

В качестве альтернативы df.loc, используемой Халил Аль Хути, вы можете рассмотреть возможность использования np.where следующим образом

df["a"] = np.where(df.variable==0, 12, df["a"])
df["b"] = np.where(df.variable==0, "up", df["a"])

В моих экспериментах решение выглядит быстрее.

Обновление

enter image description here

0 голосов
/ 06 сентября 2018

Предположим, у вас есть следующий набор данных в пандах

import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['variable', 'a', 'b'])
df.variable = np.random.choice(range(5), size=10)

print(df)

Вывод выглядит следующим образом:

  variable   a   b
0   0   NaN NaN
1   4   NaN NaN
2   0   NaN NaN
3   3   NaN NaN
4   4   NaN NaN
5   0   NaN NaN
6   3   NaN NaN
7   3   NaN NaN
8   4   NaN NaN
9   0   NaN NaN

Теперь вы можете изменить элементы в «a» и «b» следующим образом

df.loc[df.variable == 0, 'a'] = 12
df.loc[df.variable == 0, 'b'] = "up"
print(df)

вывод:

    variable    a   b
0   0   12  up
1   4   NaN NaN
2   0   12  up
3   3   NaN NaN
4   4   NaN NaN
5   0   12  up
6   3   NaN NaN
7   3   NaN NaN
8   4   NaN NaN
9   0   12  up
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...