pandas根据另一列选择的值创建新列

时间:2018-03-07 14:52:55

标签: python pandas dataframe mapping

我有一个user_id列,其中包含不同的用户ID。 从那里我想选择某些用户ID并创建另一列以识别那些选定的用户ID属于哪个组。

对于例如用户ID" attamm1,attbmm1"属于"供应商ABC"与用户ID匹配的另一个新创建的列。

我怎么能这样做,谢谢!

#map user id
userid_list = ['attamm1', 'attbmm1']
df['Vendor ABC'] = df[df.STRUCTURALSTATUS.isin(value_list)]

输出:

expected out screenshot

4 个答案:

答案 0 :(得分:1)

您可以使用.loc

df.loc[df.STRUCTURALSTATUS.isin(value_list), 'Vendor ABC'] = df.loc[df.STRUCTURALSTATUS.isin(value_list), 'user_id']

答案 1 :(得分:0)

Python函数示例:

def function_name(input):
    #do something, example
    output = input * 2
    return output

我能想到的是用您想要的地图定义字典。所以

dict = {1:'A', 2:'B', 3:'C' ,4:'D' , ... , 9:'I'}
然后写一个像这样的函数

def f(x):
    x = str(x)
    s = ''
    for i in x:
       s += dict[int(i)]
    return s

定义此功能后,您可以像f(123)=' ABC'一样使用它。

首先在代码中执行此操作。并删除此行f("attmlk1") = "CWT" and f("attctl1") = "RJ" - 它没有意义。

答案 2 :(得分:0)

def f(x):
    x = str(x)
    s = dict[x]
    return s

删除旧功能定义

答案 3 :(得分:0)

dict = {'attmlk1': 'CWT', 'attmmma1': 'CWT', 'attanna1': 'CWT', 'attmsl1': 'RNJ', 'kyqang1': 'RNJ'}

def f(x):
    x = str(x)
    s = dict[x]
    return s

value_list = ['attmlk1','attctl1']

df.loc[df.CREATEDBY.isin(value_list), 'Vendor'] = 
df.loc[df.CREATEDBY.isin(value_list), 'CREATEDBY']

df['Vendor'] = df['Vendor'].apply(lambda x: f(x))

key error " 'nan'