рассчитать df.describe () для каждого значения в столбце и воссоздать фрейм данных - PullRequest
0 голосов
/ 08 октября 2019

Представьте себе следующий фрейм данных:

d={‘cluster’: [1,1,3,4,2,2],
   ‘Weight‘: [65, 70, 68, 75, 78, 62],
   ‘Height’: [170, 173, 174, 180, 184, 167]}
df=pd.DataFrame(d)

Теперь, как использовать цикл for для возврата фрейма данных, который вычисляет средний вес и рост для каждого значения в кластере.

ЕслиЯ пишу, что глупые коды будут такими:

#creating subsets and concat
a=pd.DaFrame(df[df[‘cluster’]==1].describe().loc[‘mean’])
b= pd.DaFrame(df[df[‘cluster’]==2].describe().loc[‘mean)
....
DF= pd.concat([a,b], axis=1)

Это будет смешно, когда в столбце будет больше кластеров.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 09 октября 2019
import pandas as pd

d={'cluster': [1,1,3,4,2,2],
   'Weight': [65, 70, 68, 75, 78, 62],
   'Height': [170, 173, 174, 180, 184, 167]}
df=pd.DataFrame(d)
df.groupby('cluster').agg(['mean'])

Эта реализация также имеет то преимущество, что вы можете добавлять дополнительные функции на основе агрегации (например, медиана) в будущем, если это необходимо.

0 голосов
/ 09 октября 2019

Попробуйте:

import pandas as pd

d={'cluster': [1,1,3,4,2,2],
   'Weight': [65, 70, 68, 75, 78, 62],
   'Height': [170, 173, 174, 180, 184, 167]}
df=pd.DataFrame(d)

newdf = df.groupby('cluster').describe().iloc[:,1]
print(newdf)

РЕДАКТИРОВАТЬ: WeNYoBen делает это лучше, если вы хотите только средства / не нужно выбирать что-то еще из describe()

...