Мне нужно добавить 2 столбца во фрейм данных Pandas, заполненный условным средним и стандартным отклонением.
# Import pandas library
import pandas as pd
# Initialize list of lists
data = [
['Tom', 'Blue', 'Small', 10, ],
['Tom', 'Blue', 'Big', 15, ],
['Tom', 'Red', 'Big', 3, ],
['Tom', 'Red', 'Small', 8, ],
['Tom', 'Red', 'Medium', 5, ],
['Tom', 'Blue', 'Medium', 12, ],
['Nick', 'Blue', 'Small', 15, ],
['Nick', 'Red', 'Medium', 11, ],
['Nick', 'Red', 'Small', 17, ],
['Julie', 'Blue', 'Big', 14, ],
['Julie', 'Red', 'Big', 11, ],
['Julie', 'Red', 'Medium', 3, ],
['Julie', 'Red', 'Medium', 4, ],
]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ['Name', 'Colour', 'Size', 'Age'])
# print dataframe.
df
В этом примере мне нужно добавить 2 столбца:
df['mean']
и df['std']
в зависимости только от названия и цвета.
Я просмотрел документацию .mean()
и .std()
, но не нашел способа добавить набор условий. Я полагаю, что мне могут понадобиться 2 функции, которые для каждой строки принимают имя и цвет в качестве аргументов, вычисляют среднее значение или стандартное отклонение для всей серии, а затем заполняют новые столбцы.
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.std.html
Я считаю, что мне нужна функция, которая динамически проверяет имя и цвет для каждой строки, потому что, в отличие от этого примера фрейма данных, мое приложение предназначено для фрейма данных, который имеет тысячи и имена и тысячи цветов.
Я знаю, как применить .mean
или .std
ко всей серии панд без условий:
df['Age'].std()
или
df['Age'].mean()
Я также обнаружил, что преобразование «группа +» делает что-то немного похожее без возможности динамической проверки каждой строки, как могла бы функция.
df['mean'] = df.groupby(['Name','Colour']).transform('mean')
Спасибо за вашу помощь.
Вот результат, который я ожидал. Спасибо за ответы:
Выходной кадр данных