【问题标题】:How to add new columns at the end of a dataframe that contains hourly mean values and corresponding number of counts for each mean value per hour.如何在包含每小时平均值和每小时每个平均值的相应计数的数据帧末尾添加新列。
【发布时间】:2018-12-08 23:33:39
【问题描述】:

我搜索了很多,但找不到我的问题的答案。

我有太阳能电池测量数据。数据有时间戳值,但没有频率。一小时内的值的数量不是恒定的。一个小时内可以出现任意数量的值。所以我正在努力创造:

我。具有数据每小时平均值的列。

二。另一列包含每小时发生的测量计数。这很重要,因为我的时间戳没有固定频率。因此,重要的是要知道为一天中的特定小时计算的平均值是否有 1 次或 2 次或 14 次测量。

我的数据框图片:

我的代码:

yr=df.index.year
mon=df.index.month
day= df.index.day
hr = df.index.hour
df.groupby([yr, mon, day, hr])['KP_sensor'].mean()

如何在此数据框的末尾添加两列(平均列和该小时内发生的测量计数)。

【问题讨论】:

  • 你想像this一样使用.transform()
  • @CJ59 是的,这解决了附加列的问题,但我仍然不确定如何计算每小时的测量计数。你能帮我解决这个问题吗?谢谢!
  • 你可以试试:df['counts'] = df['hr'].map(df.groupby(['hr']).size())
  • @YOLO 它有一些 sytanx 错误。 'hr' 和我上面计算的一样吗?它的数据类型是 int64。我试过没有''但它没有用。你能再看一遍吗?谢谢!

标签: python pandas pandas-groupby


【解决方案1】:

这是许多可能的解决方案之一。你已经完成了一部分。

df["hour"] = df.index.hour
df["date"] = df.index.date

dfMeans = df.groupby(["date", "hour"])[["Sol_Data", "Irr_Unc_perc", "ISF_stable", "KP_sensor", "Tamb"]].mean()
dfMeans.reset_index(inplace=True)

dfHours = pd.DataFrame(df.groupby(["date", "hour"])["hour"].count())
dfHours.columns = ["count"]
dfHours.reset_index(inplace=True)

dfFinal = pd.merge(dfHours, dfMeans, how="left", on=["date","hour"])

【讨论】:

  • 谢谢@griggy,太棒了。只有我可以根据时间戳对最终的 dfFinal 进行排序?
  • @Moh,这应该为你做dfFinal.sort_values(by=["date","hour"], ascending=False)
  • @griddy 谢谢 :)
【解决方案2】:

实际上,考虑到您的问题,您最好使用aggregate,因为您有多个列要取平均值。

yr=df.index.year
mon=df.index.month
day= df.index.day
hr = df.index.hour
grouped_data = df.groupby([yr, mon, day, hr])
new_data = grouped_data.agg('mean')
new_data['counts'] = grouped_data.transform('count')

【讨论】:

    猜你喜欢
    • 2017-11-12
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2023-03-06
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    相关资源
    最近更新 更多