在熊猫数据框中重复计数

时间:2018-02-28 20:40:49

标签: python pandas

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直到最后一行?

3 个答案:

答案 0 :(得分:2)

你可以这样做:

df["counter_gen"] = df.index % 3 + 1
由于mod从零开始,

+1将摆脱零,3由你决定。

答案 1 :(得分: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

答案 2 :(得分:0)

如果表现至关重要,您可以使用

之类的东西
np.repeat([[1, 2, 3]], len(df)/3 + 1, 0).ravel()

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