Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据另一列的选定值创建新的柱基_Python_Pandas_Dataframe_Mapping - Fatal编程技术网

Python 根据另一列的选定值创建新的柱基

Python 根据另一列的选定值创建新的柱基,python,pandas,dataframe,mapping,Python,Pandas,Dataframe,Mapping,我有一个具有不同用户id的列用户id。 从这里,我想选择某些用户ID,并创建另一列来标识这些选定的用户ID属于哪个组 例如,用户ID“attamm1,attbmm1”属于与用户ID匹配的另一个新创建列的“供应商ABC” 我该怎么做,谢谢 #map user id userid_list = ['attamm1', 'attbmm1'] df['Vendor ABC'] = df[df.STRUCTURALSTATUS.isin(value_list)] 输出: 您可以使用.loc df.loc

我有一个具有不同用户id的列用户id。 从这里,我想选择某些用户ID,并创建另一列来标识这些选定的用户ID属于哪个组

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

我该怎么做,谢谢

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

您可以使用.loc

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

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”和f(“attctl1”)=“RJ”——这没有意义

def f(x):
    x = str(x)
    s = dict[x]
    return s
并删除旧的函数定义

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))

您能给出输入数据和所需输出的示例吗?这将帮助我们更快地解决您的问题。@ManishSaraswat嗨,我已经上传了所需输出的屏幕截图。列“供应商”将基于用户id。如何将新列“供应商ABC”中的用户id名称更改为另一个定义的名称,如“CWT”,而不是从列“用户id”中复制相同的名称。例如,如果用户id=“123”,供应商ABC=“CWT”,如果用户id=“456”,供应商ABC=RJ首先定义一个执行所需映射的函数,因此
f(“123”)=“CWT”
f(“456”)=“RJ-”
。然后写
df['Vendor ABC']=df['Vendor ABC']。在我上面回答的行下方应用(lambda x:f(x))
。不,您需要先定义函数<代码>f(“attmlk1”)=“CWT”和f(“attctl1”)=“RJ”将不起作用,这是您需要定义的功能的一个示例。抱歉,无法正确定义!定义f(“attmlk1”=“CWT”、“attctl1”=“RJ”):
f(“attmlk1”)=“CWT”和f(“attctl1”)=“RJ”
这不是定义函数的方式。它没有意义,而且正在犯错误。请看下面我的评论。嗨,很抱歉,我无法了解如何实现我想要实现的目标。请参阅上面的“我的代码”。注意:您想要在
供应商
中找到的所有用户ID必须在
值列表
中。在上面的代码中,只有
'attmlk1','attctl1'
将位于
供应商
列中。添加
'nan':无
dict
。没问题:)如果您认为答案有用,请使用投票按钮。我建议你学习一些Python课程,比如:D