Новый столбец на основе условного - PullRequest
1 голос
/ 23 марта 2019

В настоящее время пытаются изменить некоторые рыночные значения в кадре данных, если какое-либо значение присутствует в другом столбце. Я знаком только с пониманием списков для создания новых столбцов, но не уверен, что это возможно сделать таким образом.

Я попробовал следующую функцию, хотя она не работает:


def multiply_with(x):
    if df['a'] in list_multiple_double: 
        x = x * 0.5
    elif df['a'] in list_multiple_triple:  
        x = x * 0.33
    else: 
        x = x
    return x

Я пытался применить это к столбцу рыночной стоимости, но безуспешно.

Предположим, что в pd.dataframe есть два столбца a и b, и я хотел бы создать c. Также допустим 2 списка, list_a и list_b. Для каждого наблюдения, если a присутствует в list_a, умножьте на 0,5 и верните это в столбце c. Если a присутствует в list_ b, умножьте на 0,333 и верните в c. Если нет, либо верните a в c. Мне нужно следующее:

list_a = ['Denmark Sweden', 'Norway Sweden']
list_b = ['Denmark Sweden Norway']


values = [200,300,500,1000,200]
country = ['Denmark', 'Denmark Sweden', 'Denmark Sweden Norway', 'Sweden', 'Norway']
values_adj = [200, 150, 166.67, 1000, 200]

df = pd.DataFrame()
df['values'] = pd.Series(values)
df['country'] = pd.Series(country)
df['values_adj'] = pd.Series(values_adj)

Ответы [ 2 ]

2 голосов
/ 23 марта 2019

Использование np.select :

df['values_adj'] = np.select([df['country'].isin(list_a), df['country'].isin(list_b)], [df['values']*0.5, df['values']*0.333], df['values'])

print(df)

Выход:

values                country  values_adj
0     200                Denmark       200.0
1     300         Denmark Sweden       150.0
2     500  Denmark Sweden Norway       166.5
3    1000                 Sweden      1000.0
4     200                 Norway       200.0
2 голосов
/ 23 марта 2019
df['values_adj'] = df['values']
df.loc[df['country'].isin(list_a), 'values_adj'] *= 0.5
df.loc[df['country'].isin(list_b), 'values_adj'] *= 0.33
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...