我有一天的数据如下:
df =

我的输出应该是这样的:

我需要做两项主要工作:
(A)创造千年发展目标:
G 211
( b)过滤:
我使用的代码如下所示:
def zenith_clipping_MDGS(df):
data_file = df
df_zenith_clipped = data_file[data_file.zenith<=86.273]
df_zenith_clipped.reset_index(drop = True, inplace = True)
df_zenith_clipped['Hour'] = df_zenith_clipped['Datetime'].dt.hour
df_zenith_clipped['Date'] = df_zenith_clipped['Datetime'].dt.date
adj_df = pd.DataFrame()
for date in df_zenith_clipped.Date.unique():
print(date)
df = df_zenith_clipped[df_zenith_clipped.Date == date]
MDGS = abs(df.GHI_clearsky - df.GHI)
MDGS = MDGS.sort_values(ascending = False)
MDGS.reset_index(inplace = True, drop=True)
df['top3_MDGS'] = sum(MDGS[:3])
df['top1_MDGS'] = MDGS[0]
for hour in df.Hour.unique():
df1 = df[df.Hour == hour]
if (len(df1) == 60) and (df1.GHI.any() != 0):
adj_df = adj_df.append(df1)
else:
continue
adj_df.reset_index(inplace = True, drop=True)
return adj_df这实际上比它应该花的时间更长。有没有什么功能,或者更好的方法去做这件事?
谢谢,谢谢你的反馈
发布于 2021-05-31 05:30:43
一些可能被优化的东西..。
如果您只需要本系列中的前3个值,那么对这些值的整个列表进行排序可能不是很有效,因为额外的操作将被用于冗余排序。this question的答案讨论了一些更有效的方法(例如,使用max()查找最高值,将其从列表中删除,并重复3次)。
( b)虽然我并不完全熟悉您正在使用的数据/框架,但看起来您可能能够优化小时查找--特别是使用df1 = df[df.Hour == hour],==似乎需要遍历df.Hour中的所有内容,以便找到一个匹配的元素。如果可以重写为使用数字索引而不需要搜索,它可能执行得更快。
https://stackoverflow.com/questions/67767958
复制相似问题