遍历具有多个句柄的Pandas DataFrame,并迭代追加已编辑的行?

时间:2019-06-07 12:34:35

标签: python pandas dataframe iteration handle

我有3个数据框:

  • df1具有匹配历史记录(按日期组织)
  • df2包含玩家统计信息(按玩家名称组织)
  • df3每场比赛(df2)的球员状态(df1)之间的差异[进行中]

我想做类似的事情:

    for idx, W_nm, L_nm in df1[['index','winner_name','loser_name']].values:
      df3.loc[idx] = df2.loc[W_nm] - df2.loc[L_nm]
      #... edit this row further

失败的原因是:

  • 'idx'未引用df1的索引
  • df3没有定义的列

有没有办法引用第一行的索引?

我读到的iterrows().loc[]慢7倍,并且我有很多数据要处理

有没有比这更清洁的东西了?

    for idx in df1.index:
      W_nm = df1.loc[idx,'winner_name']
      L_nm = df1.loc[idx,'loser_name']
      df3.loc[idx] = df2.loc[W_nm] - df2.loc[L_nm]
      #... edit this row further

哪个不解决“未定义的列”,但给我我的句柄。

所以我期望这样的事情:

 df1
[            'Loser'  'Winner'   'Score'
  0          Harry    Hermione   3-7   ...
  1          Harry    Ron        0-2   ...
  2          Ron      Voldemort  7-89   ... ]

 df2
[            'Spells' 'Allies'
  Harry      23       84      ...
  Hermione   94       68      ...
  Ron        14       63      ...
  Voldemort  97       92      ... ]

then

df3
[            'Spells' 'Allies'
  0          -71      16      ...
  1          9        21      ...
  2          -83      -29     ... ]

1 个答案:

答案 0 :(得分:0)

您需要的是join

loser = df1.join(df2, on='Loser').loc[:,['Spells', 'Allies']]
winner = df1.join(df2, on='Winner').loc[:,['Spells', 'Allies']]
df3 = winner - loser

给出您的示例数据:

   Spells  Allies
0      71     -16
1      -9     -21
2      83      29