添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Python - 如何在一个数据框架的每一行上循环,以改变某一列的值?

1 人关注

我需要遍历一个 数据框架 来给新的列分配一个值。 例如,它应该在每一行上进行循环,并这样做------。
if HomeTeam == 'Burnley':
HV = 50
elif HomeTeam == 'Crystal Palace':
HV = 65
以此类推......对于整个数据框架(我在一个单独的文件中为每个团队提供HV值)。和HV一样,我想为数据框架中显示为NaN的其他列赋值。我试着用iterrows(),但是它把每一行都当作一个元组,而元组是不可改变的。

1 个评论
你能公布原始数据框架吗?
python
pandas
dataframe
Ishan
Ishan
发布于 2022-07-31
3 个回答
Henry03
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'})
    
第一个正是我想要的--我有20个独特的对子,但这是可以人工管理的,所以非常感谢!
Shubham Periwal
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
Kevin Choon Liang Yew
发布于 2022-07-31
0 人赞同

如果你的每个团队的HV将是相同的,你可以首先通过你的数据框架创建一个团队的列表,你有

teams = df['HomeTeam'].unique()