Python 如何通过迭代现有列的值来创建新列?

Python 如何通过迭代现有列的值来创建新列?,python,pandas,dataframe,Python,Pandas,Dataframe,我的数据框中有一列,如下所示: ContextID 7289972 7289972 7289972 7289973 7289973 7304693 7304693 7304693 ContextID Name 7289972 Gas_basics 7289972 Gas_basics 7289972 Gas_basics 7289973 Plasma_basics 7289973 Plasma_basics 7

我的数据框中有一列,如下所示:

ContextID
7289972
7289972
7289972
7289973
7289973
7304693
7304693
7304693
    ContextID     Name
    7289972   Gas_basics
    7289972   Gas_basics
    7289972   Gas_basics
    7289973   Plasma_basics
    7289973   Plasma_basics
    7304693   DC2
    7304693   DC2
    7304693   DC2
我正在尝试基于此
ContextID
列创建一个新列,如下所示:

ContextID
7289972
7289972
7289972
7289973
7289973
7304693
7304693
7304693
    ContextID     Name
    7289972   Gas_basics
    7289972   Gas_basics
    7289972   Gas_basics
    7289973   Plasma_basics
    7289973   Plasma_basics
    7304693   DC2
    7304693   DC2
    7304693   DC2
我尝试了以下代码

ID = data.ContextID.tolist()
print(ID)

for id in ID:
    if (ID == '7289972'):
        data['Strategyname'] = 'Plasma_basics'
    elif(ID == '7289973'):
        data['Strategyname'] = 'Gas_basics'
    elif(ID == '7304693'):
        data['Strategyname'] = 'DC2'
但它只是创建了一个名为
id
的变量,类型为
int
,大小为1,值为7304693

最后,我希望将新生成的名为
Strategyname
的列添加到名为
data
的主数据框中

谁能告诉我我犯了什么错误,这样我就能更好地理解我的错误,帮助我克服这个问题

谢谢

编辑1:

我有2095个独特的
ContextID
每个都属于3个:气体基础,等离子基础,DC2

例如:

contextid   strategyname
7289971         DC2
7289972     Plasma_basics
7289973      Gas_basics
7289997         DC2
7289998     Plasma_basics
7289999      Gas_basics
7289972     Plasma_basics
7289973      Gas_basics
7304693         DC2
用于矢量化方法:

df['Name']=np.select([df.ContextID.eq(7289972),df.ContextID.eq(7289973),\
                  df.ContextID.eq(7304693)],['Plasma_basics','Gas_basics','DC_Only'])
print(df)

   ContextID           Name
0    7289972  Plasma_basics
1    7289972  Plasma_basics
2    7289972  Plasma_basics
3    7289973     Gas_basics
4    7289973     Gas_basics
5    7304693        DC_Only
6    7304693        DC_Only
7    7304693        DC_Only
结帐

您可以执行以下操作:

def myfunc(x):
    if x==1:
        return 'hello'
    else:
        return 'world'
df = pd.DataFrame([1, 1, 1, 2, 2, 2], columns=['A'])
df['B'] = df['A'].apply(myfunc)

   A      B
0  1  hello
1  1  hello
2  1  hello
3  2  world
4  2  world
5  2  world

如果字典中有数据框:

s = """
ContextID,Name
7289972,Gas_basics
7289973,Plasma_basics
7304693,DC_Only
"""
df = pd.read_csv(pd.compat.StringIO(s), sep=',')
df
您可以将其转换为python dict,然后使用pandas
map
函数将其应用于数据集(有关
map
的更多信息,请参见:):

输出:

    ContextID   Name    NewName
0   7289972 Gas_basics  Gas_basics
1   7289972 Gas_basics  Gas_basics
2   7289972 Gas_basics  Gas_basics
3   7289973 Plasma_basics   Plasma_basics
4   7289973 Plasma_basics   Plasma_basics
5   7304693 DC_Only DC_Only
6   7304693 DC_Only DC_Only
7   7304693 DC_Only DC_Only

您可以使用DataFrame.merge:

data="""
ContextID
7289972
7289972
7289972
7289973
7289973
7304693
7304693
7304693
"""
df1 = pd.read_csv(pd.compat.StringIO(data), sep='\s+',dtype={'ContextID' : str})

df2 = pd.DataFrame({'ContextID': ['7289972','7289973','7304693'],
                    'Name': ['Plasma_basics','Gas_basics','DC2']})
print(df1.merge(df2.drop_duplicates(), how='right',  on=['ContextID']))
输出:

  ContextID           Name
0   7289972  Plasma_basics
1   7289972  Plasma_basics
2   7289972  Plasma_basics
3   7289973     Gas_basics
4   7289973     Gas_basics
5   7304693            DC2
6   7304693            DC2
7   7304693            DC2
您也可以使用csv文件或文本来设置输入:

data1 ="""
ContextID Name
7289972 Plasma_basics
7289973 Gas_basics
7304693 DC2
"""

df1 = pd.read_csv(pd.compat.StringIO(data1), sep='\s+',dtype={'ContextID' : str})

嘿,安基,谢谢你的回复。我的数据集中有2095个不同的
ContextID
。有没有一种方法可以应用循环,这样我就不必手动输入所有的
ContextID
?感谢您是否有2095 ID的映射(满足条件时要输入的值)?就像一个单独的字典数据框?我现在有一个单独的CSV文件,其中包含
ContextID
以及
Name
为什么不使用merge then,无论如何,如果你能发布csv wrt的例子,我会告诉你怎么做他们anky,我已经编辑了这个问题。如果这是你想要的,请告诉我。谢谢这里是什么ContextID属于哪个名称的映射?那是在桌子、字典或某种规则中吗?