![](/img/trans.png)
[英]How to apply condition on column while iterating over every row of dataframe in python
[英]Python - How to Loop over every row in a dataframe to change the values in a column?
我需要遍历Dataframe以将值分配给新列。
例如,它应该遍历每一行,然后这样做——
if HomeTeam == 'Burnley':
HV = 50
elif HomeTeam == 'Crystal Palace':
HV = 65
等等..对于整个 dataframe (我在单独的文件中有每个团队的 HV 值)。 像 HV 一样,我想将值分配给 dataframe 中显示为 NaN 的其他列。 我尝试使用 iterrows() 但它将每一行视为不可变的元组。
有两个选项取决于是否有许多独特的对
.map()
手动将这些对键入字典,然后使用.map(dict)
:
dict = {'Burnley': 50, 'Crystal Palace': 65, ...)
df['HV'] = df['HomeTeam'].map(dict)
将单独的文件读取为 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'})
你可以使用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)
df
HomeTeam HV
0 a NaN
1 b NaN
df_new
HV HomeTeam
0 65.0 a
1 55.0 b
如果每个团队的 HV 相同,您可以首先通过 dataframe 创建一个团队列表
teams = df['HomeTeam'].unique()
接下来,通过创建另一个具有 HV(我们称之为 df2)的 dataframe,您可以遍历列表并将值分配给它们。
for i in teams:
df.loc[df['HomeTeam'].isin([i])] = df2['HV'].loc[df['HomeTeam'].isin([i])]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.