[英]Python - How to Loop over every row in a dataframe to change the values in a column?
I need to iterate over a Dataframe to assign a value to the new columns.我需要遍历Dataframe以将值分配给新列。
For instance, it should loop over every row, and do this-例如,它应该遍历每一行,然后这样做——
if HomeTeam == 'Burnley':
HV = 50
elif HomeTeam == 'Crystal Palace':
HV = 65
and so on..for the whole dataframe (I have the HV values for each team in a separate file).等等..对于整个 dataframe (我在单独的文件中有每个团队的 HV 值)。 Like HV, I want to assign values to other columns that are shown NaN in the dataframe.像 HV 一样,我想将值分配给 dataframe 中显示为 NaN 的其他列。 I tried using iterrows() but it treats every row as a tuple which is immutable.我尝试使用 iterrows() 但它将每一行视为不可变的元组。
There are two options depending on if there are many unique pairs有两个选项取决于是否有许多独特的对
.map()
几个独特的对: .map()
Manually key in the pairs into a dictionary, then use .map(dict)
:手动将这些对键入字典,然后使用.map(dict)
:
dict = {'Burnley': 50, 'Crystal Palace': 65, ...)
df['HV'] = df['HomeTeam'].map(dict)
Reading in the separate file as DataFrame and merging, rather than manually keying in. Assuming the separate file is in .csv
format:将单独的文件读取为 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'})
You can use dictionary
and map
to do what you want to do你可以使用dictionary
和map
做你想做的事
hv_dict = {'Burnley': 50, 'Crystal Palace': 65}
df['HV'] = df['HomeTeam'].map(hv_dict)
This should be faster than iterating and neater这应该比迭代更快更整洁
On a side note, if you do want to use iterrows (not recommended), then you can use like this:附带说明,如果您确实想使用 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 df
HomeTeam HV
0 a NaN
1 b NaN
df_new df_new
HV HomeTeam
0 65.0 a
1 55.0 b
If your HV for each team will be the same, you can first create a list of teams you have through your dataframe如果每个团队的 HV 相同,您可以首先通过 dataframe 创建一个团队列表
teams = df['HomeTeam'].unique()
Next, by creating another dataframe that has the HV (let's call it df2), you can iterate through the list and assign the value to them.接下来,通过创建另一个具有 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.