Создание нового столбца путем ссылки на другие столбцы из фрейма данных в python - PullRequest
0 голосов
/ 08 марта 2020

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

import pandas as pd
import numpy as np

df = pd.read_excel(r'/Users/Desktop/dictionary.xlsx')
mydict = {"NSW": range(1000,1209)}

if df['Sub-Segment'] == "Australia":
    df['Region'] = df['Postal Code'].map(mydict) 

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

Sub-Segment Postal Code
Australia   1001
Australia   1002
Australia   1209
Mexico      1004

Требуемый фрейм данных такой:

Sub-Segment Postal Code  Region
Australia   1001         NSW
Australia   1002         NSW
Australia   1209         NSW
Mexico      1004         Other

Я пробовал выше и получил следующую ошибку сообщение:

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Ответы [ 2 ]

0 голосов
/ 08 марта 2020

Я не уверен, куда ты идешь со словарем. Поскольку, если вы используете словарь, у вас должно быть множество ключей, я предпочитаю вместо этого использовать функцию.
Вы можете использовать pandas.DataFrame.loc, чтобы получить нужные вам строки, и использовать pandas.DataFrame.apply , чтобы применить функцию.

import pandas as pd
import numpy as np

df=pd.read_excel(r'/Users/Desktop/dictionary.xlsx' )

def func(x):
    if 1000<=x<=1209:
        return 'NSW'
    else:
        # some other stuff maybe?
        pass

df.loc[df['Sub-Segment']=="Australia",'Region']=df['PostalCode'].apply(func)
df = df.fillna('Other')
print(df)
0 голосов
/ 08 марта 2020
mydict={
    "NSW": range(1000, 1210),
    "NHL": range(2000, 2099),
}

def region(df):
    if df['Sub-Segment'] == 'Australia':
        result = [key for (key, value) in mydict.items() if df['Postal Code'] in value]
        if result:
            return result[0]
    return 'Other'

df['Region'] = df.apply(lambda row: region(row), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...