【问题标题】:I want to put the opponent's information into a new column in a Pandas Dataframe我想将对手的信息放入 Pandas Dataframe 的新列中
【发布时间】:2017-11-23 04:02:30
【问题描述】:

除了 Opp_DRPM 之外,我在 Pandas DataFrame 中有以下所有列

    Date  Name              Team Opp DRPM Pos Opp_DRPM
    11/22 Stephen Curry     gsw  okc 1.0  1   2.2
    11/22 Russell Westbrook okc  gsw 2.2  1   1.0

我想做的是:对于每个日期和每个玩家,根据对手和他们所打的相同位置,将 DRPM 的数量放在一个新的列“Opp_DRPM”中。

因此,例如,斯蒂芬库里是一名控球后卫(位置 1)并为 GSW 效力。 GSW正在与OKC比赛并与同样是控球后卫(位置1)的拉塞尔威斯布鲁克配对。我想将拉塞尔威斯布鲁克的 DRPM 放到斯蒂芬库里的排位中,反之亦然。

【问题讨论】:

  • 显示你的预期输出
  • 这是我的预期输出。我拥有除 Opp_DRPM 之外的所有列,这将是一个新列,看起来就像我在上面显示的那样。

标签: python pandas dataframe


【解决方案1】:

按排序的 Opp 和 Team 分组,然后转换顺序。

df['Opp_DRPM']=df.groupby(list(map(''.join,(np.sort(df[['Opp','Team']].values,1))))).DRPM.transform(lambda x : x.iloc[::-1])
df
Out[60]: 
    Date              Name Team  Opp  DRPM  Pos  Opp_DRPM
0  11/22      StephenCurry  gsw  okc   1.0    1       2.2
1  11/22  RussellWestbrook  okc  gsw   2.2    1       1.0

【讨论】:

  • 我认为它有效!我现在正在测试它。抛个弧线球,如果我把Team和Opp转换成Integers,代码会有什么变化?
  • @GilO'Brien 也一样,你可以测试一下
  • 我还需要在组中包含日期和位置。日期是 datetime64[ns] 列。
  • @GilO'Brien 更改为df.groupby(['Date',list(map(''.join,(np.sort(df[['Opp','Team']].values,1))))]).DRPM.transform(lambda x : x.iloc[::-1])
  • 我在您发布代码后编辑了我的评论。我还需要 Pos 在组中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 2021-12-27
  • 2018-09-24
  • 1970-01-01
  • 2021-01-15
  • 2015-05-14
相关资源
最近更新 更多