python - 两个日期之间的所有星期天,使用 pandas 的索引
问题描述
如何在每个用户的 2 个日期之间生成星期日的所有日期
这是我的数据框:
df = pd.DataFrame({'Name': ['A', 'B'],
'DATE_START':['2021-05-03', '2021-05-03'],
'DATE_END':['2021-05-10', '2021-05-10']})
我试图找到的最终结果:
NAME | DATE_START | DATE_END
--------------------------------------
A | 2021-05-03 | 2021-05-03
A | 2021-05-09 | 2021-05-09
A | 2021-05-10 | 2021-05-10
B | 2021-05-03 | 2021-05-03
B | 2021-05-09 | 2021-05-09
B | 2021-05-10 | 2021-05-10
我尝试这样的事情,但我无法得到结果:
def sundays(row):
s = pd.date_range(row['DATE_START'], row['DATE_END'])
return s[s.weekday == 6].to_list()
df.apply(sundays, axis=1)
解决方案
我试图使解决方案与您的解决方案相似。我认为问题主要在于字符串到日期(时间)的转换。见下文。
df = pd.DataFrame({'Name': ['A', 'B'],
'DATE_START':['2021-05-03', '2021-05-03'],
'DATE_END':['2021-05-10', '2021-05-10']})
df['DATE_START'] = pd.to_datetime(df['DATE_START'], format='%Y-%m-%d')
df['DATE_END'] = pd.to_datetime(df['DATE_END'], format='%Y-%m-%d')
def sundays(row):
start = row['DATE_START']
while start.day_of_week != 6:
start += dt.timedelta(days=1)
return pd.date_range(start, row['DATE_END'], freq='7D')
df['range'] = df.apply(sundays, axis=1)
推荐阅读
- java - 在模块中发现重复的类 org.apache.http.HttpHeaders
- mysql - 创建表 mySql 语法错误(在其他版本上工作)
- php - libphonenumber、php 和 CI3 - 尝试验证电话号码但未获得预期结果
- python - 如何打印与重复键关联的所有值?
- swift - 无法将 segmentedControl 设置回未选择索引
- java - 如何从数据库中删除项目?
- ionic4 - 在ionic 4中上传时如何动态更新文件名
- git - Jekyll 没有更新所有文件
- ios - 在 Stackview 中设置项目的 ID
- android - Android如何将jar文件导入库模块?