【问题标题】:Combining datetime column in to a mean count by date column将 datetime 列组合为按日期列的平均计数
【发布时间】:2022-01-31 19:06:23
【问题描述】:

我有一个按以下方式格式化的数据集,我正在尝试以一种方式重新格式化它,而不是 DateTime 列,id 获取每天的平均订单数(星期一、星期二等)

TIMESTAMP TEMPERATURE WINDSPEED
2020-08-01 13.2 4.9
2020-08-01 15 5
2020-08-02 16 2.4
2020-08-02 14.2 6.3
2020-09-10 17.5 2
2020-09-10 9 8.3

到目前为止,这是我的代码,一切似乎都运行良好,我可以单独打印每天的平均订单数,但是当尝试将其导入数据集时,订单数是 Nan

df = pd.read_csv('orders_autumn_2020.csv')

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

df_mod = df.groupby(df['TIMESTAMP'].dt.weekday).mean()
datecount = df.resample('D', on='TIMESTAMP').count()
ORDCOUNT = (datecount['WINDSPEED'])
df_mod["ORDCOUNT"] = ORDCOUNT
df_mod = df_mod[["TEMPERATURE","WIND_SPEED","ORDCOUNT"]]

print(df_mod)
TIMESTAMP TEMPERATURE WINDSPEED ORDCOUNT
0 17.055038 4.027295 NaN
1 15.961699 2.951472 NaN
2 16.305026 3.600513 NaN
3 16.142084 4.051359 NaN
4 16.864189 3.131984 NaN
5 17.364454 4.230898 NaN
6 18.321807 4.310171 NaN

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    在您的解决方案中,按 2 个不同的值聚合 - 通过 weekdayD 的天数,因此索引是不同的,因此如果分配列得到 NaNs。

    如果需要按weekday 计数并省略NaNs(如果存在于WINDSPEED 列和GroupBy.count 中),则可能的解决方案:

    df1 = (df.groupby(df['TIMESTAMP'].dt.weekday)
             .agg(TEMPERATURE = ('TEMPERATURE','mean'),
                  WINDSPEED = ('WINDSPEED','mean'),
                  ORDCOUNT = ('WINDSPEED','count')))
    

    或者如果需要每天计数,请使用Grouper:

    df2 = (df.groupby(pd.Grouper(freq='d', key='TIMESTAMP'))
             .agg(TEMPERATURE = ('TEMPERATURE','mean'),
                  WINDSPEED = ('WINDSPEED','mean'),
                  ORDCOUNT = ('WINDSPEED','count')))
    

    您的解决方案:

    df_mod = df.groupby(df['TIMESTAMP'].dt.weekday).mean()
    datecount = df.resample('D', on='TIMESTAMP')['WINDSPEED'].count()
    
    df_mod["ORDCOUNT"] = datecount.groupby(datecount.index.weekday).sum()
    

    【讨论】:

    • 我是 pandas 的新手,所以后续问题是:在 df1 中,我如何获得 ordcount 的平均值而不是总数?我试着做 ORDCOUNT = ('WINDSPEED','count').mean()。但这是无效的语法。
    • @Kodtld - 你能更具体一点吗?你需要df_mod["ORDCOUNT"] = datecount.groupby(datecount.index.weekday).mean() 而不是df_mod["ORDCOUNT"] = datecount.groupby(datecount.index.weekday).sum() 吗?
    猜你喜欢
    • 2014-06-04
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多