【发布时间】:2019-04-29 13:27:42
【问题描述】:
我有一个包含日期的数据框,我想选择除周末外的每周最高日期(所以周五,如果有的话),除非没有周一至周五的数据,并且周六/周日是唯一可用的日期.
样本数据可以这样设置:
dates = pd.Series(data=['2018-11-05', '2018-11-06', '2018-11-07', '2018-11-08', '2018-11-09',
'2018-11-12', '2018-11-13', '2018-11-14', '2018-11-15', '2018-11-17',
'2018-11-19',
'2018-12-01',
])
nums = np.random.randint(50, 100, 12)
# nums
# array([95, 80, 81, 51, 98, 62, 50, 55, 59, 77, 69])
df = pd.DataFrame(data={'dates': dates, 'nums': nums})
df['dates'] = pd.to_datetime(df['dates'])
我想要的记录:
- 2018-11-09 是星期五
- 2018-11-15 是星期四(不是 2018-11-17 因为它是星期六)
- 2018-11-19 是星期一,是该周的唯一记录
- 2018-12-01 是星期六,但是那一周的唯一记录
我目前的解决方案在answer below 中,但我认为这并不理想,并且有一些我必须解决的问题。简单来说就是:
- 按周分组:
df.groupby(df['dates'].dt.week).apply(some_function) - 如果该周只有一条记录,则返回它
- 否则,选择天
理想情况下,我想要一种写作方式:
[latest Mon-Fri record] if [has Mon-Fri record] else [latest Sat-Sun record]
【问题讨论】:
标签: python pandas pandas-groupby dayofweek week-number