在条件下获取唯一值的计数

时间:2017-04-05 15:26:00

标签: python pandas dataframe group-by

我想获得一支球队在一个赛季中获胜的时间。

我的数据框看起来像这样:

Date          Team    Win   Player    SHOT
2014-20-10     CHI     1    Benoit     1
2014-20-10     CHI     1    Benoit     0
2014-20-10     CHI     1    Benoit     0
2014-20-10     CHI     1    Mickael    1
2014-23-10     CHI     0    Phillips   1

所以问题如下,如果我总结胜利,我获得太多胜利,因为每个玩家的每一个镜头的值都是重复的。

我已经完成了一个独特的值列合并Date,Win和Team,我可以获得这些唯一值的计数。

df.new["Unique"] = df.new["Date"].map(str) + df.new["Team"] + df.new["Win"]
counts = df.new['Unique'].value_counts()
df.new.groupby(['Unique'])['Win'].sum()  

我尝试了两种技术来获得胜利的总和,但每次我只得到数据中唯一值的时间。我想要的是每个球队本赛季的胜利总数。因此,每当一个唯一值与Win列中的1相关联时,我想要+1,当它为0 + 0时......所以我得到了每个团队在整个赛季中的总胜利。

我希望我很清楚。我会用R中的聚合做到这一点,但我是python的新手。你会怎么做?

谢谢

2 个答案:

答案 0 :(得分:2)

我相信pivot_table也适用于此。

wins = pd.pivot_table(df, 'Win', 'Date', 'Team').sum()

答案 1 :(得分:1)

如果您有完美的数据:

df.groupby(['Date','Team'])['Win'].max()

因为一个团队在约会时应该只有一个结果。 并为所有日期:

df.groupby(['Date','Team'])['Win'].max().groupby(level=1).sum()