我有一个带有日期的数据框,我想选择每个星期中除周末以外的最高日期(所以如果有周五的话),除非没有周一到周五的数据,只有周六/周日可用
示例数据可以这样设置:
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'])
我想要的唱片:
我目前的解决方案是在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]
创建一个新的工作日层次结构,其中周六和周日的优先级最低。然后
sort_values
在这个新排名上+groupby
+.tail(1)
输出
如果您的数据跨越多年,则需要在
Year
+week
上分组我编写了一个函数来选择本周的有效最高记录,这需要在每周groupby上使用:
用正确的小组打电话,我得到:
有几个问题:
如果我不放
recs.copy()
,我得到ValueError: Shape of passed values is (3, 12), indices imply (3, 4)
pandas' ^{} 只使用列名,不使用表达式
.apply()
之后我从groupby+apply得到一个额外的索引列'dates',,需要是explicitly dropped:
如果我得到一个包含星期六和星期天数据(2天)的记录,我需要添加一个检查
recs[recs['weekday'] <= 4]
是否为空,然后只使用.nlargest(1, 'weekday')
而不过滤weekday <= 4
;但这不是问题的重点相关问题 更多 >
编程相关推荐