2017-05-11 4 views
0

に基づいて増分番号を持つデータフレームで新しい列を作成し、以下のパンダのデータフレームを考えてみましょう:別の列

from pandas import Timestamp 
df = pd.DataFrame({ 
    'day': [Timestamp('2017-03-27'), 
      Timestamp('2017-03-27'), 
      Timestamp('2017-04-01'), 
      Timestamp('2017-04-03'), 
      Timestamp('2017-04-06'), 
      Timestamp('2017-04-07'), 
      Timestamp('2017-04-11'), 
      Timestamp('2017-05-01'), 
      Timestamp('2017-05-01')], 
'act_id': ['916298883', 
      '916806776', 
      '923496071', 
      '926539428', 
      '930641527', 
      '931935227', 
      '937765185', 
      '966163233', 
      '966417205'] 
}) 

ご覧の通り、7日に分布する9つの固有のIDがあります。

私は2つの新しい列を追加する方法を探しています。

  • 最初の列:

それぞれの新しい日の増分番号。例えば、等 '2017年3月27日'(同じ日の同じ数)のための1、 '2017年4月1日' の2、 '2017年4月3日' 3、

  • 第2列:

1日あたりの新しいact_idの増分数。 '916298883' の例えば1等(同じ日の2017年3月27日」にリンクされている) '916806776' の2、 '923496071' の1、 '926539428' の1、

最終的な表は次のようになりますthis

私は既にapplyと関数を使って最初の列を作成しようとしましたが、動作しません。

#Create helper function to give index number to a new column 
counter = 1 
def giveFlag(x): 
    global counter 
    index = counter 
    counter+=1 
    return index 

そして:
# Create day flagger column
df_helper['day_no'] = df_helper['day'].apply(lambda x: giveFlag(x))

答えて

0

これを試してみてください。

days = list(set(df['day'])) 
days.sort() 
day_no = list() 
iter_no = list() 
for index,day in enumerate(days): 
    counter=1 
    for dfday in df['day']: 
     if dfday == day: 
      iter_no.append(counter) 
      day_no.append(index+1) 
      counter+=1 

df['day_no'] = pd.Series(day_no).values 
df['iter_no'] = pd.Series(iter_no).values  
+0

ありがとうございました!あなたは私が期待していたよりシンプルにしました。 – oikonang