我有一个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
之后,我可以轻松计算每列的出现次数。但目前我无法实现两个给定结果中的一个。我知道它应该以某种方式与apply
或transform
一起工作,但不幸的是我没有确切的想法。
也许甚至有更好的解决方案来实现这个目标?
谢谢。
答案 0 :(得分:0)
从Rank(列)中你可以剪切和get_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
现在,您可以使用原始数据框加入/不论这些内容。