【发布时间】:2019-08-10 06:08:55
【问题描述】:
假设你有一个如下的数据框:
data = pd.DataFrame({'Year': [2019]*5+[2020]*5,
'Month': [1,1,2,2,3]*2,
'Hour': [0,1,2,3,4]*2,
'Value': [0.2,0.3,0.2,0.1,0.4,0.3,0.2,0.5,0.1,0.2]})
然后,将“低”时间设置为 1 到 3 小时(含)之间的时间,将“高”时间设置为所有其他时间(在本例中为 0 和 4 小时)。我想做的是获得每个Year 和Month 的“低”和“高”时间的平均Value。理想情况下,这些将作为新列附加到 groupby() 数据帧(即,最终数据帧将具有 Year、Month、Low 和 High 列)。
For 循环可以工作,但并不理想。我还可以创建一个虚拟变量(例如,0 和 1)来表示数据帧中的“低”和“高”时间到 groupby。但是,在我看来,应该有某种方法可以使用 Pandas groupby(['Year', 'Month']).agg(...) 以有效/最佳的方式实现结果。到目前为止,我没有任何运气使用 groupby+agg,主要是因为 agg() 只使用一个系列(而不是剩余的数据帧),所以不能使用基于 Hour 的 agg 中的条件来计算平均值Value.
样本数据的预期结果:
Year Month High Low
0 2019 1 0.2 0.30
1 2019 2 NaN 0.15
2 2019 3 0.4 NaN
3 2020 1 0.3 0.20
4 2020 2 NaN 0.30
5 2020 3 0.2 NaN
任何帮助表示赞赏:)
【问题讨论】:
-
第一次读错你的问题,如果我理解你到底想要4行?每年与每月相结合。那是对的吗?请参阅我的输出答案。
标签: python pandas pandas-groupby