我正在使用熊猫,并且有两个数据框:
df1
:
id date status rpbid rpfid
1 d1 closed null 10
2 d2 closed null 11
3 d3 closed null null
和df2
:
id date status rpbid rpfid
10 d10 updated 1 null
11 d11 updated 2 9
9 d9 updated 11 null
我的想法是要处理2种情况:
1.已关闭记录是该实例的第一条记录和最终记录(id 3
中的df1
),
2.在关闭的记录中,有另一个更新的记录在df2中链接。
rfbid
和rpbid
用于replacedbyid
和replacementforid
因此,最终的df为:
id date status rpbid rpfid id2 date2 rpbid2 rpfip2
1 d1 closed null 10 10 d10 1 null
2 d2 closed null 11 9 d9 11 null
3 d3 closed null null null null null null
到目前为止,我已经尝试在df1
和df2
上进行第一个左联接,以获取所有的第一个递归联接,然后尝试使用循环来检查{{1 }}为空,如果不是的话,我要回过头来看rpbid2
的id列中df1
值的rpdid2
,那么我想更新合并后的第二部分数据框将成为适用的下一步连接。
这是原始代码:我无法得到它不是错误
df2
更多背景信息;如果replacebyID为null,并且状态为“已更新”,则表示该记录是该给定订单的第一条记录。
答案 0 :(得分:0)
免责声明:与其试图在问题的底部找出一种获取所需数据框的方法,我的目的是要确保您完全确定自己要做什么正在这样做,也许可以帮助您更好地构造数据。
对于我所看到的,您有两个数据帧,每个数据帧中都有相互绑定以更新其内容;问题是您正在显示一个示例,其中要更新另一个数据帧中另一个元素的行也要被更新。
您正在弄乱数据结构和行标识。我不清楚每个数据帧中的id引用是引用其自身数据帧中的一行还是引用另一个数据行中的一行; ID未按包含顺序排序。制作联合数据框时,您递归地包含一列以再次替换数据,从而使数据框在没有实际用途的情况下水平增长。
我认为您已经尝试过以自己的方式来更新数据,现在您遇到的问题是,如果您使用的数据结构更为普遍,并且已经被认为具有可伸缩性和易于操作,那么您将不会遇到这些问题。
如果要更新数据,最好的方法是使用数据模型,该模型具有正确设置数据库内部表格式的表(您仍可以使用pandas;数据框可以作为表)。您可以在更新请求到达要更新内容的地方时更新数据,而不是单独保存更新记录,而是同时拥有更新请求。那太乱了。如果要保留更新记录,则必须有一个不断更新的表,然后是另一个表,该表在表中显示每个已经执行操作的记录。您可以在后者中存储先前的值和为其更新的值。
您必须正确命名数据帧,并且当您引用另一个数据帧中的ID时,该字段的名称必须固有地指示对该数据帧的引用。
< / li>您可以在该字段中包括日期,而不必引用另一个表。看起来不太好。只需使用datetime.datetime
模块并将对象转储到数据框中即可; Python负责其余的工作。
变量名也应该是不言自明的:与其使用rpbid
,而不必向每个人解释意味着被替换的事物,只需使用replaced_by_id
(注意下划线来分隔单词)