编辑:我更新了以下说明,以便更清楚地说明我要完成的工作。
我是一个相当新的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
我正在尝试根据dataframe
字段输出多个DataDate
,如下所示:
在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()
将保留所有result
并添加data
中尚未包含result
的行,而update()
将result
使用data
中已存在密钥的result
中的值覆盖update()
中的值。为了完整起见,我在combine_first()
之前尝试了Author_ID FirstName LastName
1 Rock Smith
2 Edward Thomas
。
不幸的是,这不能按预期工作。我已经查看了过去已经回答过的其他问题,但我发现没有回答如何更新所有现有记录但添加新记录。
为了回答这个问题,我们有一个现有的工作流程,它将数据格式化为输出格式并对其进行处理。我需要这些数据流经同一个工作流程。
非常感谢任何见解。
答案 0 :(得分:1)
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