繁体   English   中英

根据日期之间计算总和或平均值

[英]Calculate sum or average based on between dates

我有一个代码,我想计算两个日期之间的总和或平均值。

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 funktion 它只会在 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
# first convert strings to actual dates
df['Dates'] = pandas.to_datetime(df['Dates'])     
# sum the values between target dates
df[df['Dates'].between('2020-10-01','2020-10-14')]['Value'].sum()

应该可以正常工作...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM