gpt4 book ai didi

python - 按日期拆分 DataFrame 并通过附加新记录和覆盖现有记录来重新组合

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:47 26 4
gpt4 key购买 nike

编辑:我更新了下面的描述,以便更清楚地说明我要实现的目标。

我是一个相当新的 Python 用户(我通常使用 R,但我正在尝试学习 Python)。我正在尝试使用 pandas 来完成以下任务。

我有一个类似于下面的 DataFrame (df)(我的真实数据集有更多列):

  PROG.ID   TITLE   STATUS   DataDate     
--------- ------- -------- --------------
KEY1 Key 1 A 2007-01-01
KEY2 Key 2 A 2007-01-01
KEY3 Key 3 A 2008-07-01
KEY2 Key 2 I 2009-07-01
KEY4 Key 4 A 2010-01-01

我尝试根据 DataDate 字段输出多个 dataframe,如下所示:

File_2007-01-01.csv中:

  PROG.ID   TITLE   STATUS   DataDate     
--------- ------- -------- --------------
KEY1 Key 1 A 2007-01-01
KEY2 Key 2 A 2007-01-01

已添加 KEY1 和 KEY2,因为它们是具有此日期的唯一记录。

File_2008-07-01.csv中:

  PROG.ID   TITLE   STATUS   DataDate     
--------- ------- -------- --------------
KEY1 Key 1 A 2007-01-01
KEY2 Key 2 A 2007-01-01
KEY3 Key 3 A 2008-07-01

KEY3 已添加,因为它不存在。

File_2009-07-01.csv中:

  PROG.ID   TITLE   STATUS   DataDate     
--------- ------- -------- --------------
KEY1 Key 1 A 2007-01-01
KEY2 Key 2 I 2009-07-01
KEY3 Key 3 A 2008-07-01

注意 KEY2 已被替换为最新记录。其他记录保持不变。

File_2009-07-01.csv中:

  PROG.ID   TITLE   STATUS   DataDate     
--------- ------- -------- --------------
KEY1 Key 1 A 2007-01-01
KEY2 Key 2 I 2009-07-01
KEY3 Key 3 A 2008-07-01
KEY4 Key 4 A 2010-01-01

KEY4 已添加。其他记录保持不变。

我尝试使用如下代码(但这不起作用):

df = df.set_index('PROG.ID')
result = pd.DataFrame()
for key, data in df.groupby('DataDate'):
if result.empty:
result.data.copy()
else:
result.combine_first(data)
result.update(data)
result.to_csv('./File_{dt}.csv'.format(dt=key))

第一个文件被正确写入,但所有后续文件都具有与第一个文件相同的数据。

据我了解,combine_first() 将保留所有 结果 并添加 data 中尚未存在于 中的行>result,而 update() 会用 data 中的值覆盖 result 中的值,其中键已存在于 结果。为了完整起见,我也在 combine_first() 之前尝试了 update()

不幸的是,这并没有按预期工作。我查看了过去已回答的其他问题,但没有找到回答如何更新所有现有记录但附加新记录的问题。

为了回答这个问题,我们有一个现有的工作流程,它采用类似于输出格式的数据并对其进行处理。我需要这些数据流经相同的工作流程。

任何见解将不胜感激。

最佳答案

IIUC:

df = df.sort_values('DataDate')

for d in df['DataDate'].dt.strftime('%Y-%m-%d').unique():
df.loc[df['DataDate'] <= d] \
.groupby('PROG.ID', as_index=False).last() \
.to_csv(r'd:/temp/File_{}.csv'.format(d), index=False)

结果:

File_2007-01-01.csv

PROG.ID,TITLE,STATUS,DataDate
KEY1,Key 1,A,2007-01-01
KEY2,Key 2,A,2007-01-01

File_2008-07-01.csv

PROG.ID,TITLE,STATUS,DataDate
KEY1,Key 1,A,2007-01-01
KEY2,Key 2,A,2007-01-01
KEY3,Key 3,A,2008-07-01

File_2009-07-01.csv

PROG.ID,TITLE,STATUS,DataDate
KEY1,Key 1,A,2007-01-01
KEY2,Key 2,I,2009-07-01
KEY3,Key 3,A,2008-07-01

File_2010-01-01.csv

PROG.ID,TITLE,STATUS,DataDate
KEY1,Key 1,A,2007-01-01
KEY2,Key 2,I,2009-07-01
KEY3,Key 3,A,2008-07-01
KEY4,Key 4,A,2010-01-01

关于python - 按日期拆分 DataFrame 并通过附加新记录和覆盖现有记录来重新组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45595304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com