我需要遍历一个
数据框架
来给新的列分配一个值。
例如,它应该在每一行上进行循环,并这样做------。
if HomeTeam == 'Burnley':
HV = 50
elif HomeTeam == 'Crystal Palace':
HV = 65
以此类推......对于整个数据框架(我在一个单独的文件中为每个团队提供HV值)。和HV一样,我想为数据框架中显示为NaN的其他列赋值。我试着用iterrows(),但是它把每一行都当作一个元组,而元组是不可改变的。
Python - 如何在一个数据框架的每一行上循环,以改变某一列的值?
1
人关注
1
个评论
DrCorgi
:
你能公布原始数据框架吗?
Ishan
发布于
2022-07-31
3
个回答
Henry03
发布于
2022-07-31
已采纳
0
人赞同
有两个选项,取决于是否有许多独特的配对
Few unique pairs:
.map()
手动将这些配对键入一个字典,然后使用
.map(dict)
。
dict = {'Burnley': 50, 'Crystal Palace': 65, ...)
df['HV'] = df['HomeTeam'].map(dict)
Many unique pairs
将单独的文件作为DataFrame读入并合并,而不是手动键入。假设独立文件是.csv
格式。
hv_hometeam_df = pd.read_csv('PATH/to/csv')
merge_df = df.merge(hv_hometown_df,
left_on='HomeTeam',
right_on='COLUMN')
merge_df = merge_df\
.drop(labels=['HomeTeam'], axis=1)\
.rename(columns={'COLUMN': 'HomeTeam'})
Ishan
:
第一个正是我想要的--我有20个独特的对子,但这是可以人工管理的,所以非常感谢!
Shubham Periwal
发布于
2022-07-31
0
人赞同
你可以用
dictionary
和
map
来做你想做的事
hv_dict = {'Burnley': 50, 'Crystal Palace': 65}
df['HV'] = df['HomeTeam'].map(hv_dict)
这应该比迭代更快,而且更整洁
话说回来,如果你确实想使用iterrows(不推荐),那么你可以这样使用。
df = pd.DataFrame({'HomeTeam': ['a', 'b'], 'HV': np.nan})
df_new = pd.DataFrame()
for index,row in df.iterrows():
if(row['HomeTeam']=='a'):
row['HV'] = 65
elif(row['HomeTeam']=='b'):
row['HV'] = 55
df_new = df_new.append(row)
HomeTeam HV
0 a NaN
1 b NaN
df_new
HV HomeTeam
0 65.0 a
1 55.0 b
Kevin Choon Liang Yew
发布于
2022-07-31
0
人赞同
如果你的每个团队的HV将是相同的,你可以首先通过你的数据框架创建一个团队的列表,你有
teams = df['HomeTeam'].unique()