Создание нескольких столбцов на основе условий из других столбцов - PullRequest
2 голосов
/ 29 мая 2020

Я довольно долго искал решение, но почти все вопросы связаны с созданием одного столбца. Итак, вот моя проблема.

Учитывая пример DataFrame:

df = pd.DataFrame({
    "blue": [5, 5, 4], 
    "red": [1, 7, 5],
    "yellow": [3, 9, 0],
    "orange": [9, 7, 3],
    "config": ["north", "south", "north"]
})
   blue config  orange  red  yellow
0     5  north       9    1       3
1     5  south       7    7       9
2     4  north       3    5       0

Я хотел бы создать дополнительные столбцы на основе нескольких условий (отображение должно быть указать c). Вот пример того, что я пробовал:

def gen_col(row):

    if row["config"] == "north":
        new_blue = row["blue"]
        new_red = row["red"]
        new_yellow = row["yellow"]
        new_orange = row["orange"]
        return new_blue, new_red, new_yellow, new_orange
    elif row["config"] == "south":
        new_blue = row["orange"]
        new_red = row["yellow"]
        new_yellow = row["red"]
        new_orange = row["blue"]
        return new_blue, new_red, new_yellow, new_orange

df["new_blue", "new_red", "new_yellow", "new_orange"] = df.apply(gen_col, axis=1)

Однако это возвращает следующее:

   blue config  orange  red  yellow (new_blue, new_red, new_yellow, new_orange)
0     5  north       9    1       3             (5, 1, 3, 9)
1     5  south       7    7       9             (7, 9, 7, 5)
2     4  north       3    5       0             (4, 5, 0, 3)                         

Любые идеи о том, как создать отдельные новые столбцы ?

1 Ответ

4 голосов
/ 29 мая 2020

Используйте параметр result_type='expand' в DataFrame.apply, а также добавьте вложенные списки для назначенных столбцов:

df[["new_blue", "new_red", "new_yellow", "new_orange"]] = df.apply(gen_col, axis=1, result_type='expand')
print (df)
   blue  red  yellow  orange config  new_blue  new_red  new_yellow  new_orange
0     5    1       3       9  north         5        1           3           9
1     5    7       9       7  south         7        9           7           5
2     4    5       0       3  north         4        5           0           3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...