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

gv8xihay  于 2023-01-15  发布在  Python
关注(0)|答案(2)|浏览(145)

我必须每天运行python脚本来只提取特定日期的最新记录&最新记录应该附加到一个csv文件中。
这里我有4列开始日期、结束日期、虚拟ID、值

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()]]
fnvucqvd

fnvucqvd1#

您可以应用服装功能。

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
6kkfgxo0

6kkfgxo02#

我不确定这是否适合您,但您可能遇到的一个问题是,您的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

相关问题