如何在数据框的末尾添加新列,该数据框包含每小时平均值和每小时每个平均值的相应计数数。

时间:2018-12-08 23:33:39

标签: python pandas pandas-groupby

我一直在搜索很多东西,但是找不到我的问题的答案。

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

i。每小时数据平均值的列。

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

我的数据框图片:

enter image description here

我的代码:

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()

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

2 个答案:

答案 0 :(得分:0)

实际上,考虑到您的问题,使用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')

答案 1 :(得分:0)

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

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"])