我有一个代码,我想计算两个日期之间的总和或平均值。
Pandas DataFrame 中的示例数据:
data = {'Dates':['2022-12-22','2021-01-01','2021-01-05','2021-01-07','2021-01-10','2021-01-13'],
'Value':['4','3','6','5','4','3']}
我想遍历所有日期,而不仅仅是列中的日期,因此从开始日期到结束日期,然后从所有日期减去例如 14 天得到平均值或总和。
所以我在如何最好地构建这个方面有点卡住了,我想找出一种聪明而简洁的计算方法。我有两个想法,第一个感觉更丑更重,但我不确定方法二是否可行。你们有什么想法吗? (我在那里写的代码不正确,只是为了说明)
方法一:
date_start = 2020-12-20
date_stop = today()
date_range = date_stop - date_start
for i in dates:
if between this date and - 14 in data then sum Values
或者方法二:
date_start = 2020-12-20
date_stop = today()
date_range = date_stop - date_start
for i in dates:
df.Value.ewm(span=14, adjust=False).mean()
编辑:
太棒了!干杯,这就像一个魅力。
这是我想出来的:
input_data = pd.read_csv('data/df_random_hours.csv')
df = pd.DataFrame(input_data)
input_data = pd.read_csv('data/names.csv')
df2 = pd.DataFrame(input_data)
days = 365
date_start = datetime(2020, 1, 1)
date_stop = datetime(2021, 1, 1)
#date, NameID, Name, FDPsum_14
date_diff = (date_stop - date_start)
date_diff = date_diff.days
df['Start'] = pd.to_datetime(df['Start'])
print(df)
x = 0
df_sum = df.groupby(['NameID'])['FDP'].sum()
print(df_sum)
for x in range(0, len(df_sum)):
for i in range(0, date_diff):
if df_sum['NameID'][x] =
date_now = (date_start + timedelta(days=i))
date_old = (date_now - timedelta(days=14))
sum = df[df['Start'].between(date_old,date_now)]['FDP'].sum()
我的下一个挑战是它也被 name 或 nameid 划分,这样循环是行不通的,因为它不会告诉 sum 函数它只会查看 nameid = nameid...
我可能会做一个新的临时 df,在那里我将所有相同的 nameId 存储在一起,但同样,这感觉必须是一些更简单、更干净的方法来做到这一点。
这是 df
Unnamed: 0 Name ... Stop FDP
0 0 Jadyn Estes ... 2020-01-01 14:20:00 7.333333
1 1 Jadyn Estes ... 2020-01-02 11:10:00 4.166667
2 2 Jadyn Estes ... 2020-01-03 13:40:00 6.000000
3 3 Jadyn Estes ... 2020-01-04 14:20:00 3.333333
4 4 Jadyn Estes ... 2020-01-05 17:20:00 3.333333
... ... ... ... ... ...
14795 14795 Ellie Dawson ... 2020-12-25 20:30:00 8.000000
14796 14796 Ellie Dawson ... 2020-12-26 19:10:00 6.333333
14797 14797 Ellie Dawson ... 2020-12-27 15:40:00 3.666667
14798 14798 Ellie Dawson ... 2020-12-30 13:30:00 3.500000
14799 14799 Ellie Dawson ... 2020-12-31 23:50:00 8.833333