Alternative with groupby :
df2['key_word'] = df2.apply(lambda x: x.keyword.split('_')[0], axis=1) df2['key_action'] = df2.apply(lambda x: x.keyword.split('_')[1], axis=1) def compute_ctr(g): ctr = g[g.key_action == 'click'].COUNT.values[0] / g[g.key_action == 'pv'].COUNT.values[0] result = {'datetime': g.iloc[0,0], 'ctr': ctr} return pd.Series(result) rslt = df2.groupby('key_word').apply(compute_ctr) rslt.reset_index(inplace=True, drop=False) print(rslt) ctr datetime keyword 0 0.5 5/1/2016 a 1 0.6 5/1/2016 b 2 0.75 5/1/2016 c
source share