繁体   English   中英

Python - 如何循环遍历 dataframe 中的每一行以更改列中的值?

[英]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'})

你可以使用dictionarymap做你想做的事

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM