通过引用Python中数据框中的其他列来创建新列

时间:2020-03-08 17:56:12

标签: python pandas dictionary mapping

我想创建一个标记为Region的新列,该列将整数范围与通过字典显示的Regions相关联。但是,有一个条件:子细分市场必须是澳大利亚。

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 :(得分:0)

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)

答案 1 :(得分:0)

我不确定你要去哪本字典。由于如果您使用字典,则必须拥有大量按键,因此我更喜欢使用函数。
您可以使用<script> function number_pages() { var vars={}; var x=document.location.search.substring(1).split('&'); for(var i in x) {var z=x[i].split('=',2);vars[z[0]] = decodeURIComponent(z[1]);} var x=['frompage','topage','page','webpage','section','subsection','subsubsection']; for(var i in x) { var y = document.getElementsByClassName(x[i]); for(var j=0; j<y.length; ++j) y[j].textContent = vars[x[i]]; } } </script> 来获取所需的行,并使用pandas.DataFrame.loc来应用该功能。

pandas.DataFrame.apply