Python Pandas: создание нового столбца с расчетами на основе категориальных значений в другом столбце - PullRequest
0 голосов
/ 24 августа 2018

У меня есть следующий пример фрейма данных:

id  category        time
43  S               8
22  I               10
15  T               350
18  L               46

Я хочу применить следующую логику:

1) если значение категории равно «T», создайте новый столбец с именем «time_2», где значение «time» делится на 24.

2) если значение категории равно «L», то создайте новый столбец с именем «time_2», где значение «time» делится на 3,5.

3) в противном случае взять существующее значение времени из категорий S или I

Ниже приведена желаемая выходная таблица:

    id  category        time    time_2
    43  S               8       8
    22  I               10      10
    15  T               350     14.58333333
    18  L               46      13.14285714

Я пытался использовать pd.np.where, чтобы заставить работать вышеперечисленное, но запутался в синтаксисе.

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Вы можете использовать map для правил

In [1066]: df['time_2'] = df.time / df.category.map({'T': 24, 'L': 3.5}).fillna(1)

In [1067]: df
Out[1067]:
   id category  time     time_2
0  43        S     8   8.000000
1  22        I    10  10.000000
2  15        T   350  14.583333
3  18        L    46  13.142857
0 голосов
/ 24 августа 2018

Вы можете использовать np.select. Это хорошая альтернатива вложенной логике np.where.

conditions = [df['category'] == 'T', df['category'] == 'L']
values = [df['time'] / 24, df['time'] / 3.5]

df['time_2'] = np.select(conditions, values, df['time'])

print(df)

   id category  time     time_2
0  43        S     8   8.000000
1  22        I    10  10.000000
2  15        T   350  14.583333
3  18        L    46  13.142857
...