Как добавить столбец в фрейм данных со статистикой из группировки - PullRequest
1 голос
/ 02 апреля 2019

давайте рассмотрим следующий DataFrame:

d = {'timestamp': ['2019-04-01', '2019-04-01', '2019-04-02', '2019-04-02', '2019-04-02'],\
     'type': ['A', 'B', 'B', 'B', 'A'],\
     'value': [3, 4, 4, 2, 5]}

df = pd.DataFrame(data=d)

    timestamp   type    value
0   2019-04-01  A       3
1   2019-04-01  B       4
2   2019-04-02  B       4
3   2019-04-02  B       2
4   2019-04-02  A       5

Я хотел бы получить еще один столбец, содержащий метрику всех значений за определенный период времени и тип.Например, стандартное отклонение для каждого типа в день.

1 Ответ

1 голос
/ 02 апреля 2019

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

df = df.groupby(['timestamp','type'])['value'].std().reset_index()
print (df)
    timestamp type     value
0  2019-04-01    A       NaN
1  2019-04-01    B       NaN
2  2019-04-02    A       NaN
3  2019-04-02    B  1.414214

Если необходимо несколько показателей, используйте DataFrameGroupBy.describe:

df = df.groupby(['timestamp','type'])['value'].describe()
print (df)
                 count  mean       std  min  25%  50%  75%  max
timestamp  type                                                
2019-04-01 A       1.0   3.0       NaN  3.0  3.0  3.0  3.0  3.0
           B       1.0   4.0       NaN  4.0  4.0  4.0  4.0  4.0
2019-04-02 A       1.0   5.0       NaN  5.0  5.0  5.0  5.0  5.0
           B       2.0   3.0  1.414214  2.0  2.5  3.0  3.5  4.0

Более подробную информацию об агрегации можно найти в Агрегация в пандах .


РЕДАКТИРОВАТЬ: Если нужны месяцы, используйте Series.dt.month:

df['timestamp'] = pd.to_datetime(df['timestamp'])

df = df.groupby([df['timestamp'].dt.month.rename('months'),'type'])['value'].describe()
print (df)
             count      mean       std  min  25%  50%  75%  max
months type                                                    
4      A       2.0  4.000000  1.414214  3.0  3.5  4.0  4.5  5.0
       B       3.0  3.333333  1.154701  2.0  3.0  4.0  4.0  4.0

Если нужны годы с месяцами, используйте Series.dt.to_period для месячного периода:

m = df['timestamp'].dt.to_period('m').rename('months')
df = df.groupby([m,'type'])['value'].describe()
print (df)
              count      mean       std  min  25%  50%  75%  max
months  type                                                    
2019-04 A       2.0  4.000000  1.414214  3.0  3.5  4.0  4.5  5.0
        B       3.0  3.333333  1.154701  2.0  3.0  4.0  4.0  4.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...