Как объединить группы из более чем 1 в сводную таблицу панд - PullRequest
0 голосов
/ 06 июля 2018

У меня есть следующий код, но я хочу агрегировать только по группам из двух или более:

 pivot = pd.pivot_table(pct, values = ['CERT'], index= 'ST', aggfunc={'CERT': [min, max, np.mean]}).reset_index(level = 0).set_index('ST', drop = False)

Попробовал Групера, но позже понял, что это работает только для временных рядов.

 Sample Data Input:

 ST  CERT
 AL  8909
 TX  9805
 TX  7890

 Sample Data Output:

 ST  Min_Cert Max_Cert Mean_Cert
 TX  7890     9805     X

Как видно выше, агрегируются только данные TX, так как в них более двух записей.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

@ RafaelC Спасибо за ваше решение. Я также нашел это другое решение, если мы все еще хотели использовать метод pivot_table. Благодарю.

pivot = pd.pivot_table(pct.loc[pct.groupby('ST').CERT.transform('count')>1], values=
['CERT'], index=['ST'], aggfunc={'CERT': [min, max, np.mean]}).reset_index(level = 
0).set_index('ST', drop = False)

pivot.columns = ['ST', 'Min_CERT', 'Max_CERT', 'Mean_CERT']

Спасибо за вашу помощь.

0 голосов
/ 06 июля 2018

Почему бы не отфильтровать сначала все строки, которые имеют count 1?

c = df.groupby('ST').count()>1
new_df = df[df.ST.isin(c[c.values].index)]

Тогда просто используйте свой рабочий код

pd.pivot_table(new_df, values = ['CERT'], index= 'ST', aggfunc={'CERT': [min, max, np.mean]}).reset_index(level = 0).set_index('ST', drop = False)
...