0

首先,关于我的问题。

我有一个按年份索引的冠军联赛杯冠军数据框。

像这样,注意团队名称是字符串。

year    team         need this         year    team      wins to date

1       team1                           1       team1          1
2       team2                           2       team2          1
3       team1                           3       team1          2
4       team3                           4       team3          1

我想创建一个包含累积胜利的新列,这样我就可以绘制每支球队的折线图以及他们赢得杯赛的次数。即我需要 x 轴上的年份和 y 轴上的累积频率,前 4 支球队有 4 条不同的线。

使用 count 函数和循环可能有一种简单的方法,但我对 python 还很陌生,对这些不太了解。任何帮助将非常感激!

4

2 回答 2

1

查看关于groupbytransformcumcountcumsum( http://pandas.pydata.org/pandas-docs/stable/groupby.html ) 的 pandas 文档。您可以按团队分组并使用转换对团队是否为空的布尔结果进行累积和。

df

输入:

   year   team
0     1  team1
1     2  team2
2     3  team1
3     4  team3

进行转型

df['wins to date'] = df.groupby('team').transform(lambda x: x.notnull().cumsum())
df

或如 DSM 建议的那样:

df['wins to date'] = df.groupby('team').cumcount()+1

输出

   year   team  wins to date
0     1  team1             1
1     2  team2             1
2     3  team1             2
3     4  team3             1
于 2017-04-08T20:08:37.743 回答
0

我想你只想用groupbywith Series.cumsum。如:

df.groupby('team').cumsum()
于 2017-04-08T19:35:59.557 回答