英文:
Python, how to average month from 15th to 15th of each month, or nth to nth
问题
Sure, here's the translated content without the code part:
我有一个pandas数据框,看起来像下面这样,有一个日期时间列和一个值列。
时间戳 | 值 |
---|---|
2023年1月1日 | 100 |
2023年1月2日 | 90 |
.... | |
2023年12月12日 | 85 |
我知道如何按月份分组,但我正在寻找一种更精细的方法来计算每月平均值,从一个月的15日到下一个月的15日,看起来像下面这样。
时间戳 | 平均值 |
---|---|
2023年1月15日 - 2023年2月15日 | 95 |
2023年2月15日 - 2023年3月15日 | 93 |
.... | |
2023年11月15日 - 2023年12月15日 | 84 |
我尝试按月分组并将时间列向前推移15天,但这不是精确的,因为每个月的天数不同。
英文:
I have a pandas dataframe that looks like below with a datetime column and a value column
timestamp | value |
---|---|
1/1/2023 | 100 |
1/2/2023 | 90 |
.... | |
12/12/2023 | 85 |
i know how to group from month to month, but looking for something a bit more nuanced to calculate the average monthly value but from the 15th of one month to the 15th of the next month, looking something like below
timestamp | mean_value |
---|---|
1/15/2023 - 2/15/2023 | 95 |
2/15/2023 - 3/15/2023 | 93 |
.... | |
11/15/2023 - 12/15/2023 | 84 |
I tried grouping from month to month and shifting a time column by 15, but this isnt exact since every month has a different amount of days..
答案1
得分: 1
我相信以下任何一种方法都应该有效:
(df.groupby(df['date'].dt.day.eq(15).cumsum(), as_index=False)
.agg({'date': lambda x: '{} - {}'.format(*x.dt.strftime('%m/%d/%Y').iloc[[0, -1]].tolist()),
'value': 'mean'}))
或者
(df.groupby((df['date'] - pd.to_timedelta('14D')).dt.to_period('M'), as_index=False)
.agg({'date': lambda x: '{} - {}'.format(*x.dt.strftime('%m/%d/%Y').iloc[[0, -1]].tolist()),
'value': 'mean'}))
英文:
I believe either of these should work:
(df.groupby(df['date'].dt.day.eq(15).cumsum(),as_index=False)
.agg({'date':lambda x: '{} - {}'.format(*x.dt.strftime('%m/%d/%Y').iloc[[0,-1]].tolist()),
'value':'mean'}))
or
(df.groupby((df['date'] - pd.to_timedelta('14D')).dt.to_period('M'),as_index=False)
.agg({'date':lambda x: '{} - {}'.format(*x.dt.strftime('%m/%d/%Y').iloc[[0,-1]].tolist()),
'value':'mean'}))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论