【问题标题】:Cumulative frequency for string occurence字符串出现的累积频率
【发布时间】:2017-04-08 19:30:10
【问题描述】:

首先,谈谈我的问题。

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

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

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 还很陌生,对这些没有很好的掌握。任何帮助将不胜感激!

【问题讨论】:

  • 感谢编辑,我自己也想这样做,不知道你是怎么做到的,但谢谢!

标签: python string pandas cumulative-frequency


【解决方案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

或按照帝斯曼的建议:

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

【讨论】:

  • 也许只是.cumcount() + 1
  • @Dsm 是的。谢谢。
【解决方案2】:

我认为您只想将groupbySeries.cumsum 一起使用。如:

df.groupby('team').cumsum()

【讨论】:

  • 我如何将它应用于团队的字符串值? cumsum 函数仅将字符串附加在一起(team1team1team1,而不仅仅是数字 3)。我想数一数。有没有办法做到这一点?
  • 但是 df['wins to date'] 是整数,不是吗?那不就是你要累计求和的那一列吗?
  • 抱歉,'wins to date' 是一个喜欢创建的列 id,它没有任何数字,id 喜欢用'team1' 获胜的次数填充它,最多 thjat 行
  • 我无法让它工作,值为 NaN。我需要计算字符串'team1'的重复次数
  • 我尝试过:groupby 和 count,但值保持为 1 或 NaN,:s
猜你喜欢
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
相关资源
最近更新 更多