我必须每天运行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
我不确定这是否适用于您,但您可能遇到的一个问题是您的startdate
和enddate
列当前是字符串而不是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