字符串出现的累积频率
Cumulative frequency for string occurence
首先,先谈谈我的问题。
我有一个按年份索引的冠军联赛冠军的数据框。
像这样,注意团队名称是字符串。
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 条不同的线。
可能有一种使用计数函数和循环的简单方法,但我对 python 还很陌生,对这些还不是很了解。任何帮助将不胜感激!
我认为您只想将 groupby
与 Series.cumsum
一起使用。如:
df.groupby('team').cumsum()
查看有关 groupby
、transform
、cumcount
和 cumsum
(http://pandas.pydata.org/pandas-docs/stable/groupby.html) 的 pandas 文档。
您可以 groupby team 并使用 transform 对团队是否为 null 的 bool 结果进行 cumsum。
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
首先,先谈谈我的问题。
我有一个按年份索引的冠军联赛冠军的数据框。
像这样,注意团队名称是字符串。
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 条不同的线。
可能有一种使用计数函数和循环的简单方法,但我对 python 还很陌生,对这些还不是很了解。任何帮助将不胜感激!
我认为您只想将 groupby
与 Series.cumsum
一起使用。如:
df.groupby('team').cumsum()
查看有关 groupby
、transform
、cumcount
和 cumsum
(http://pandas.pydata.org/pandas-docs/stable/groupby.html) 的 pandas 文档。
您可以 groupby team 并使用 transform 对团队是否为 null 的 bool 结果进行 cumsum。
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