【问题标题】:Repeating Counts in Pandas Data FramePandas 数据框中的重复计数
【发布时间】:2018-03-01 05:01:01
【问题描述】:
import pandas as pd
df = pd.DataFrame({
      'item':['a','b','c','d','e','f','g','h','i','k'],
      'counter':[1,2,3,1,2,3,1,2,3,1]
      })

鉴于这种结构,将df['counter'] 自动生成为整数的重复范围、循环 1、2 和 3 直到最后一行的最佳方法是什么?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以这样做:

    df["counter_gen"] = df.index % 3 + 1
    

    +1 会去掉零,因为 mod 从零开始,3 由你决定。

    【讨论】:

      【解决方案2】:

      通过使用np.put

      a=df.index.values
      a
      Out[637]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64)
      np.put(a,a,np.array([1,2,3]))
      a
      Out[639]: array([1, 2, 3, 1, 2, 3, 1, 2, 3, 1], dtype=int64)
      df['New']=a
      df
      Out[641]: 
         counter item  New
      1        1    a    1
      2        2    b    2
      3        3    c    3
      1        1    d    1
      2        2    e    2
      3        3    f    3
      1        1    g    1
      2        2    h    2
      3        3    i    3
      1        1    k    1
      

      【讨论】:

      • put 是就地操作?如果您不复制索引,这是否也会替换数据帧的索引,如上所示?
      • @Jarad 是的,你是对的,我什至没有注意到,酷~
      • 感谢分享put,我不熟悉!非常感谢。
      • @Jarad nope,你比我好,没有你的输入我什至没有注意到这是就地操作欢呼
      【解决方案3】:

      如果性能至关重要,您可以使用类似的东西

      np.repeat([[1, 2, 3]], len(df)/3 + 1, 0).ravel()
      

      对于长度为 10^6 的数据帧,生成速度大约比(更优雅的)df.index % 3 快 8 倍。

      【讨论】:

        猜你喜欢
        • 2016-11-12
        • 1970-01-01
        • 2017-02-16
        • 2022-06-24
        • 2021-04-22
        • 2021-10-15
        • 2021-04-05
        • 1970-01-01
        • 2018-11-02
        相关资源
        最近更新 更多