使用 python 根据 API 的开始日期和结束日期列自动提取每天的行



我必须每天运行python脚本以提取特定日期的最新记录&最新的记录应该被附加到一个CSV文件中。

这里我有4列startdate, enddate, virtual_id, value

data = 'startdate': {0:'2022-12-19 06:01:12+00:00', 
1: '2022-12-19 13:49:09+00:00', 
2: '2022-12-19 13:20:36+00:00',
3: '2022-12-08 13:55:09+00:00', 
4: '2022-12-08 13:32:36+00:00', 
5: '2023-01-09 15:14:07+00:00', 
6: '2023-01-09 15:16:35+00:00'}, 
'enddate': {0:'2022-12-19 06:25:06+00:00', 
1: '2022-12-19 13:59:29+00:00', 
2: '2022-12-19 13:26:40+00:00', 
3: '2022-12-08 13:55:27+00:00', 
4: '2022-12-08 13:45:41+00:00', 
5: '2023-12-09 15:29:39+00:00', 
6: '2023-01-09 15:28:43+00:00'}, 
'virtual_id': {0: 1122, 1: 1125, 2: 1144,3: 1100, 4: 1136, 5: 1181, 6:1188}, 
'value': {0:2000, 1: 5000, 2: 70000, 3: 8000, 4: 90000,5: 7200, 6: 81000}
}
df = pd.DataFrame(data)

1月9日预期产量如果我在1月9日运行脚本,预期的输出应该显示1月8日的记录,而不是前一天的07,06等类似的

data = 'startdate': {0: '2022-12-08 13:55:09+00:00', 
1: '2022-12-08 13:32:36+00:00',}, 
'enddate': { 0: '2022-12-08 13:55:27+00:00', 
1: '2022-12-08 13:45:41+00:00', }, 
'virtual_id': {0:1144, 1:1100}, 
'value': {0: 70000, 1: 8000}
}

如果我在1月10日运行脚本,预期输出应该显示1月9日本身的记录,而不是08,07,06等

data = 'startdate': {0: '2023-01-09 15:14:07+00:00', 
1: '2023-01-09 15:16:35+00:00'}, 
'enddate': { 0: '2023-12-09 15:29:39+00:00', 
1: '2023-01-09 15:28:43+00:00' }, 
'virtual_id': {0:1181, 1:1188}, 
'value': {0: 7200, 1: 81000}
}

我已经尝试了下面的片段,但不工作

data = data[data.startdate == data.startdate.max()] & data[data.enddate == data.enddate.max()]
data = data.loc[[data.enddate.idxmax()]]

你可以应用一个costume函数

from datetime import datetime
import pandas as pd
def extract_latest_records(df):
df['startdate'] = pd.to_datetime(df['startdate'])
df['date'] = df['startdate'].dt.date
current_date = datetime.now().date()
df = df[df['date'] == current_date] 
df = df.drop('date', axis=1)
df = df.reset_index(drop=True)
return df

df = pd.DataFrame(data)
latest_df = extract_latest_records(df)
print(latest_df)

输出:

startdate                    enddate  virtual_id  value
0 2023-01-09 15:14:07+00:00  2023-12-09 15:29:39+00:00        1122   8000
1 2023-01-09 15:16:35+00:00  2023-01-09 15:28:43+00:00        1188  90000

我不确定这是否适用于您,但您可能遇到的一个问题是您的startdateenddate列当前是字符串而不是datetime对象。将它们转换为datetime可以让您访问不同的部分,如日期,日,小时,分钟等。

第二件事是,我认为你想保持行是最大的开始或最大的结束日期,这样你就结束了在你的例子中的最后两行。这意味着您需要|而不是&

df = pd.DataFrame(data)
df['startdate'] = pd.to_datetime(df['startdate']) #convert from str to datetime
df['enddate'] = pd.to_datetime(df['enddate']) #convert from str to datetime
#filter to rows w/ either the max start or end date
out_df = df[
df.startdate.dt.date.eq(df.startdate.dt.date.max())
| df.enddate.dt.date.eq(df.enddate.dt.date.max())
]
print(out_df)

输出:

startdate                   enddate  virtual_id  value
3 2023-01-09 15:14:07+00:00 2023-12-09 15:29:39+00:00        1122   8000
4 2023-01-09 15:16:35+00:00 2023-01-09 15:28:43+00:00        1188  90000

最新更新