Числовой агрегат уникального значения столбца по определенному значению с несколькими группами - PullRequest
0 голосов
/ 31 мая 2018
  1. Рассмотрим pandas dataframe

enter image description here

Числовой агрегат уникального cam_id, открытого пользователем для того же значения, на основе r_no и выводадолжно быть похоже на

enter image description here

Предложения (я пробовал группировать, кажется, я увеличиваю сложность, у меня есть миллионы строк)

df = pd.DataFrame()
df['r_no'] = [1,1,1,2,3,1,1,1,2]
df['user'] = ['sam','sam','sam','sam','peter','jack','jack','Kris','peter']
df['value'] = [76,76,7,8,8,2,29,2,8]
df['cam_id'] = ['ab','abc','ab','ab','ab','abcd','abcd','abcd','ab']
df

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Это должно сработать:

unique_count = df.loc[df['r_no']==1].groupby(['user','value'])['cam_id']\
                                     .nunique()\
                                     .rename('count_unique')

df = df.join(unique_count, on=['user','value']).fillna(0)
0 голосов
/ 31 мая 2018

Использование:

(df.merge(df[df['r_no.']==1].groupby(['r_no.','user','value'])['cam_id']
                            .nunique()
                           .rename('count_unique').reset_index(), 
         on=['r_no.','user','value'], how='left').fillna(0))

Вывод:

   r_no.   user  value cam_id  count_unique
0      1    sam     76     ab           2.0
1      1    sam     76    abc           2.0
2      1    sam      7     ab           1.0
3      2    sam      8     ab           0.0
4      2  peter      8     ab           0.0
5      1   jack      2   abcd           1.0
6      1   jack     29   abcd           1.0
7      1   kris      2   abcd           1.0
8      2  peter      8     ab           0.0
0 голосов
/ 31 мая 2018

Вы можете использовать value_counts

df ['value_count'] = df ['r_no']. Value_counts ()

Если я понимаю, что вы пытаетесьделать

...