如何通过跳过不必要的步骤来改进我的代码



我想通过删除不必要的步骤来改进我的代码,在我的代码中我有两个列表,日期和值,下面是它们的示例

dates = ['2022-10-16 17:00:00', '2022-10-16 18:00:00', '2022-10-16 21:00:00', '2022-10-16 22:00:00']
values = [1920.0, 570.0, 1680.0, 900.0]

我想把日期分为早上和晚上,例如

{'2022-10-16 17:00:00': [1920.0], '2022-10-16 18:00:00': [570.0, 1680.0, 900.0]}

即时间为06:00至17:00的所有日期都被视为上午,而时间为18:00至05:00的日期都被认为是晚上。

为了做到这一点,我使用pandas-df创建了一个额外的列"周期";(上午和晚上(,然后创建了另一个列DatePeriod,这样我就可以对当天的所有上午值进行分组,然后回到dict,这感觉非常不切实际,也没有必要使用数据帧步骤,但我想不出其他方法了!这些是的功能

def date_value_df(self):
date = self.date()
value = self.value()
df = pd.DataFrame(list(zip(date, value)), columns =['DateTime', 'Value'])
df['DateTime'] = pd.to_datetime(df.DateTime, format='%Y-%m-%d %H:%M:%S')
df['Date'] = df['DateTime'].dt.strftime('%d/%m/%Y')
df['Time'] = df['DateTime'].dt.strftime('%H:%M')
df['period'] =  pd.cut(pd.to_datetime(df.DateTime).dt.hour,
bins=[0, 5, 17, 23],
labels=['night', 'morning', 'night'],
include_lowest=True, ordered= False)
df['DatePeriod']=df['Date'].astype(str) + '-' + df['period'].astype(str)
return df

def df_to_shortened_dict(self):
df = self.date_value_df()
result_dict = (df.assign(sdatetime=df['DateTime'].astype(str)).groupby('DatePeriod')
.agg({"Value": list, ("sdatetime"): "first"})
.set_index("sdatetime")["Value"]
.to_dict())
return result_dict

如何在不使用数据帧的情况下实现此结果?

{'2022-10-16 17:00:00': [1920.0], '2022-10-16 18:00:00': [570.0, 1680.0, 900.0]}
import datetime
dates = ['2022-10-16 17:00:00', '2022-10-16 18:00:00', '2022-10-16 21:00:00', '2022-10-16 22:00:00']
values = [1920.0, 570.0, 1680.0, 900.0]
dict_values = dict(morning=None, night=None)

def is_morning(d: str):
hour = datetime.datetime.strptime(d, "%Y-%m-%d %H:%M:%S").hour
if 6 < hour <= 17:
return True
else:
return False

for index, date in enumerate(dates):
period = None
if is_morning(date):
period = 'morning'
else:
period = 'night'
if dict_values[period] is None:
dict_values[period] = {date: [values[index]]}
else:
key = list(dict_values[period].keys())[0]
dict_values[period][key].append(values[index])
print(dict_values)

打印{'morning': {'2022-10-16 17:00:00': [1920.0]}, 'night': {'2022-10-16 18:00:00': [570.0, 1680.0, 900.0]}}

相关内容

  • 没有找到相关文章

最新更新