Вставьте значение в столбец данных на основе условия - PullRequest
0 голосов
/ 12 ноября 2018

Как переписать две последние строки кода ниже, чтобы последняя строка не перезаписывала вторую строку?

Желаемый результат заключается в том, что в столбец «color» будут введены значения «pink» или «orange» в зависимости от того, какое условие выполнено: «KOM» или «Top 10».

import pandas as pd
import numpy as np

def contains_BO(seg_effs):  
        # check if segment efforts for activity contain any best overall effort
        for eff in seg_effs:
            rank = eff['kom_rank']
            if rank != None:
                if rank == 1:
                    return "KOM"
                else:
                    return "Top 10"

activities = pd.read_pickle('strava.pk1') 
activities['color'] = np.where(activities['segment_efforts'].map(contains_BO) == 'KOM', "orange", "grey")
activities['color'] = np.where(activities['segment_efforts'].map(contains_BO) == 'Top 10', "pink", "grey")

1 Ответ

0 голосов
/ 12 ноября 2018

Вы используете что-то вроде этого:

import pandas as pd

df = pd.DataFrame({"a": range(4), "b": ["x", "x", "y", "y"]})
df

   a  b
0  0  x
1  1  x
2  2  y
3  3  y

# assign 5 to rows of "a" where "b" == "x"
df.loc[df["b"] == "x", "a"] = 5
df

   a  b
0  5  x
1  5  x
2  2  y
3  3  y

В качестве альтернативы вы можете создать новый столбец из набора значений:

df["val"] = df["b"].map({"x": 5, "y": 6})

df

   a  b  val
0  5  x    5
1  5  x    5
2  2  y    6
3  3  y    6

map также поддерживает функции, если вам нужна более сложная логика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...