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,然后使用pandasmap
函数将其应用于数据集(有关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属于哪个名称的映射?那是在桌子、字典或某种规则中吗?