【问题标题】:Add new column to Dataframe by looking up values in Dictionary通过在 Dictionary 中查找值将新列添加到 Dataframe
【发布时间】:2015-10-02 15:01:58
【问题描述】:

我有一个 Pandas 数据框,其中包含每个锦标赛的运动结果如下(简化):

Tournament  WinnerName  LoserName
t1          A           X
t1          B           Y
t1          C           Y
t2          A           X
t2          B           Y
t2          C           Y

在字典中,我有关于每个锦标赛球员排名的信息:

Tournament  Player  Rank
t1          A       1
t1          B       7
t1          C       70
t2          A       11
t2          B       1
t2          C       100

现在我想知道每场比赛比赛获胜者在以下类别之一中排名的频率:a)在 1 到 10 之间,b)在 11 到 49 之间,c)大于49.

所以结果可能如下所示:

Tournament  WinnerName  LoserName   Group
t1          A           X           a
t1          B           Y           a
t1          C           Y           c
t2          A           X           b
t2          B           Y           a
t2          C           Y           c

或者像这样:

Tournament  WinnerName  LoserName   GroupA  GroupB  GroupC
t1          A           X           1       0       0
t1          B           Y           1       0       0
t1          C           Y           0       0       1
t2          A           X           0       1       0
t2          B           Y           1       0       0
t2          C           Y           0       0       1

之后,我可以轻松计算每列的出现次数。但目前我坚持实现两个给定结果之一。我知道它应该以某种方式与applytransform 一起工作,但不幸的是我没有确切的想法。 也许有更好的解决方案来实现这一点?

谢谢。

【问题讨论】:

  • 我觉得 groupbynp.histogram 在这里可能会有所帮助...

标签: python pandas transform apply lookup


【解决方案1】:

您可以从排名(列)中剪切并获取_dummies:

In [11]: r
Out[11]:
0      1
1      7
2     70
3     11
4      1
5    100
Name: Rank, dtype: int64

In [12]: pd.cut(r, [0, 10, 49, 100], include_lowest=True)
Out[12]:
0      [0, 10]
1      [0, 10]
2    (49, 100]
3     (10, 49]
4      [0, 10]
5    (49, 100]
Name: Rank, dtype: category
Categories (3, object): [[0, 10] < (10, 49] < (49, 100]]

In [13]: pd.get_dummies(pd.cut(r, [0, 10, 49, 100], include_lowest=True))
Out[13]:
   [0, 10]  (10, 49]  (49, 100]
0        1         0          0
1        1         0          0
2        0         0          1
3        0         1          0
4        1         0          0
5        0         0          1

现在您可以使用原始 DataFrame 加入/无论这些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多