python - Dataframe 嵌套循环 - set_value 变量输入

标签 python pandas dataframe

希望有人能为我指明正确的方向,因为我是 Python 的新手。

我正在做一个小项目,以使用一些足球数据掌握 Python 中的数据分析。我有两个数据帧,一个包含玩家信息,另一个包含比赛信息 (match_df)。 match_df 有 22 列,其中包含比赛中每个球员的球员 ID。我想将 match_df 中的 player_ID 数据换成玩家的技能等级。我编写了一个函数来查找玩家和日期并返回评分 (find_player_skill)。我想将其应用于数据框中的每个相关列,但无法弄清楚如何使用 apply 函数,因为参数取决于数据框行。因此,我认为最简单的方法是在数据框的每个元素上使用 set_value,如下所示。

问题是我还没有设法让它执行(尽管我没有尝试连续运行几个小时)。我假设有一种方法可以在合理的时间内用不同的代码或增强的版本做同样的事情。我已经尝试在一个小样本(3 行)上快速运行代码,然后在 30 分钟左右的时间内没有完成 1000 行。

#change player ID's to skill data, currently runs very slowly
for i in range(len(match_df['match_date'])):
    match_date = match_df['match_date'].iloc[i]
    match_index = match_df.iloc[i].name
    for pl_lab in ['h1','h2','h3','h4','h5','h6','h7','h8','h9','h10', 'h11',\
                   'a1','a2','a3','a4','a5','a6','a7','a8','a9','a10','a11']:
        player_ID = match_df[pl_lab].iloc[i]
        player_skill = find_player_skill(player_ID, match_date)
        match_df.set_value(match_index,pl_lab,player_skill)

非常感谢任何建议。

编辑:同样值得一提的是,我考虑过调试代码并为此下载了 Pycharm,但我编写的一些早期代码似乎运行得非常慢(我最初在 iPython 中编写了所有代码)

最佳答案

假设 df 是 match 的数据帧,其中 0 到 2 列是玩家 ID,这是您可以执行的操作:

df = pd.DataFrame([['c' , 'a', 'b'], ['b', 'c', 'a']])
 df
Out[70]: 
   0  1  2
0  c  a  b
1  b  c  a

df_player = pd.DataFrame([['a', 100], ['b', 230], ['c', 200]],columns=['ID', 'skill']).set_index('ID')

    skill
ID       
a     100
b     230
c     200


dic = df_player.to_dict()['skill']

df.apply(lambda x: [dic[n] if n in dic.keys() else n for n in x], axis=1)
Out[69]: 
     0    1    2
0  200  100  230
1  230  200  100

关于python - Dataframe 嵌套循环 - set_value 变量输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39833405/

相关文章:

python - 调试时深入研究变量

python - 如何模拟未按名称调用的函数?

python - 如何提高 Trac 的性能

python - 用 pandas 填充信号时保留原始数据点

python - pandas 多索引 DataFrame 中的圆形 float

python - Pandas 插值按组添加行,每组具有不同的范围

r - 理解 R 中的 xyplot

python - Matplotlib 2 字体不一致

python - 同一列中的行元素对出现的次数

python - 性能:Pandas index.intersection() 与集合交集