Python 按日期聚合的更优雅方式

Python 按日期聚合的更优雅方式,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有以下数据帧 time power 0 2019-01-01 00:00 100 1 2019-01-01 01:00 102 2 2019-01-01 02:00 100 3 2019-01-02 00:00 99 4 2019-01-02 01:00 98 5 2019-01-02 01:00 102 并希望按日期聚合功率。有两个聚合函数:std和average。因此,我想获得以下输出

我有以下数据帧

               time  power
0  2019-01-01 00:00    100
1  2019-01-01 01:00    102
2  2019-01-01 02:00    100
3  2019-01-02 00:00     99
4  2019-01-02 01:00     98
5  2019-01-02 01:00    102
并希望按日期聚合功率。有两个聚合函数:std和average。因此,我想获得以下输出

         date   avg_power  std_power
0  2019-01-01  100.666667   1.154701
1  2019-01-02   99.666667   2.081666
下面是生成以下内容的代码:

import pandas as pd
import numpy as np

power_df = pd.DataFrame({
    'time': ['2019-01-01 00:00', '2019-01-01 01:00', '2019-01-01 02:00', '2019-01-02 00:00', '2019-01-02 01:00', '2019-01-02 01:00'],
    'power': [100, 102, 100, 99, 98, 102]
})
power_df['time'] = pd.to_datetime(power_df['time'])

power_df['date'] = power_df['time'].dt.date

grouped_power_by_date = power_df.groupby('date').agg(**{
    'avg_power': pd.NamedAgg('power', np.mean),
    'std_power': pd.NamedAgg('power', np.std),
})

print(grouped_power_by_date.reset_index())
因此,我有两个问题:

  • 是否有一种方法可以按日期分组而不添加额外的“日期”列
  • 当我在
    group\u by
    中使用
    as\u index=False
    时,输出如下所示:
  • 然而,我希望得到我上面描述的输出。这是一个bug还是我做错了什么?

    试试这个:

    power_df.groupby(pd.to_datetime(power_df.time).dt.date).agg(**{
        'avg_power': pd.NamedAgg('power', np.mean),
        'std_power': pd.NamedAgg('power', np.std),
    })
    
    o/p

    试试这个:

    power_df.groupby(pd.to_datetime(power_df.time).dt.date).agg(**{
        'avg_power': pd.NamedAgg('power', np.mean),
        'std_power': pd.NamedAgg('power', np.std),
    })
    
    o/p


    我想你已经做了你想做的。当我运行
    print(按日期分组\u power\u.reset\u index())
    时,我会得到您想要的输出:

             date   avg_power  std_power
    0  2019-01-01  100.666667   1.154701
    1  2019-01-02   99.666667   2.081666
    

    我想你已经做了你想做的。当我运行
    print(按日期分组\u power\u.reset\u index())
    时,我会得到您想要的输出:

             date   avg_power  std_power
    0  2019-01-01  100.666667   1.154701
    1  2019-01-02   99.666667   2.081666
    

    预期输出是什么?预期输出是什么?是的,我共享的代码生成预期输出。但是,我不明白为什么按日期分组的功率=功率df.groupby('date').agg(**{'avg\u power':pd.namedagh('power',np.mean),'std\u power':pd.namedagh('power',np.std),})产生了一些不同的结果。不同之处在于索引。当您使用
    .agg()
    进行聚合时,返回的数据帧将根据您分组数据的方式(本例中的日期)进行索引,而第一个数据帧将以数字形式进行索引(0、1等)。是的,我共享的代码将生成预期的输出。但是,我不明白为什么按日期分组的功率=功率df.groupby('date').agg(**{'avg\u power':pd.namedagh('power',np.mean),'std\u power':pd.namedagh('power',np.std),})产生了一些不同的结果。不同之处在于索引。使用
    .agg()
    进行聚合时,返回的数据帧将根据数据分组的方式(本例中的日期)进行索引,而第一个数据帧将以数字形式进行索引(0、1等)