【问题标题】:Pandas Rolling value_counts() [duplicate]熊猫滚动 value_counts() [重复]
【发布时间】:2022-02-19 08:16:52
【问题描述】:

我正在寻找一种在 pandas 中在滚动时间窗口内返回特定 value_counts() 的方法。我找到了以下问题 (pandas `value_counts` on a rolling time window),但这并不是我想要的。

如果我有一个如下所示的 DataFrame:

     symbol
0     apple
1     apple
2     apple
3     apple
4  cucumber
5  cucumber
6  cucumber

我想要这个输出:

     symbol  counts
0     apple       1
1     apple       2
2     apple       3
3     apple       4
4  cucumber       1
5  cucumber       2
6  cucumber       3

到目前为止,我正在使用 for 循环,它有效,但对于更大的 DataFrame 来说非常耗时:

for index in df.index:
    symbol = df.at[index,'symbol']
    df.at[index,'counts'] = df['symbol'].value_counts()[symbol]

有人有更好更快的解决方案吗?

【问题讨论】:

    标签: python pandas dataframe rolling-computation


    【解决方案1】:

    您可以groupby "symbol" 并使用cumcount 来获取编号(必须加1,因为cumcount 从0 开始):

    df['counts'] = df.groupby('symbol').cumcount() + 1
    

    输出:

         symbol  counts
    0     apple       1
    1     apple       2
    2     apple       3
    3     apple       4
    4  cucumber       1
    5  cucumber       2
    6  cucumber       3
    

    【讨论】:

      猜你喜欢
      • 2019-10-21
      • 2019-01-18
      • 2018-09-06
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 2018-06-26
      • 2017-03-30
      • 2019-04-11
      相关资源
      最近更新 更多