我的数据框中有一列,如下所示:
ContextID
7289972
7289972
7289972
7289973
7289973
7304693
7304693
7304693
我正在尝试基于此 ContextID
列创建一个新列,如下所示:
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 个之一:Gas_basics、Plasma_basics、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
最佳答案
如果你有一个带有字典的 DataFrame:
s = """
ContextID,Name
7289972,Gas_basics
7289973,Plasma_basics
7304693,DC_Only
"""
df = pd.read_csv(pd.compat.StringIO(s), sep=',')
df
您可以将其转换为 python 字典,然后使用 pandas map
函数应用于您的数据集(有关 map
的更多信息:https://pandas.pydata.org/pandas-docs/version/0.23.3/generated/pandas.Series.map.html ):
d = dict(df.values)
df['NewName'] = df['ContextID'].map(d)
df
输出:
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
关于python - 如何通过迭代现有列的值来创建新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55005039/