基于条件的Python递归更新

时间:2018-08-20 19:56:08

标签: python pandas dataframe

我正在使用熊猫,并且有两个数据框:

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中链接。 rfbidrpbid用于replacedbyidreplacementforid 因此,最终的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

到目前为止,我已经尝试在df1df2上进行第一个左联接,以获取所有的第一个递归联接,然后尝试使用循环来检查{{1 }}为空,如果不是的话,我要回过头来看rpbid2的id列中df1值的rpdid2,那么我想更新合并后的第二部分数据框将成为适用的下一步连接。

这是原始代码:我无法得到它不是错误

df2

更多背景信息;如果replacebyID为null,并且状态为“已更新”,则表示该记录是该给定订单的第一条记录。

1 个答案:

答案 0 :(得分:0)

免责声明:与其试图在问题的底部找出一种获取所需数据框的方法,我的目的是要确保您完全确定自己要做什么正在这样做,也许可以帮助您更好地构造数据。

对于我所看到的,您有两个数据帧,每个数据帧中都有相互绑定以更新其内容;问题是您正在显示一个示例,其中要更新另一个数据帧中另一个元素的行也要被更新。

您正在弄乱数据结构和行标识。我不清楚每个数据帧中的id引用是引用其自身数据帧中的一行还是引用另一个数据行中的一行; ID未按包含顺序排序。制作联合数据框时,您递归地包含一列以再次替换数据,从而使数据框在没有实际用途的情况下水平增长。

我认为您已经尝试过以自己的方式来更新数据,现在您遇到的问题是,如果您使用的数据结构更为普遍,并且已经被认为具有可伸缩性和易于操作,那么您将不会遇到这些问题。

  1. 如果要更新数据,最好的方法是使用数据模型,该模型具有正确设置数据库内部表格式的表(您仍可以使用pandas;数据框可以作为表)。您可以在更新请求到达要更新内容的地方时更新数据,而不是单独保存更新记录,而是同时拥有更新请求。那太乱了。如果要保留更新记录,则必须有一个不断更新的表,然后是另一个表,该表在表中显示每个已经执行操作的记录。您可以在后者中存储先前的值和为其更新的值。

  2. 您必须正确命名数据帧,并且当您引用另一个数据帧中的ID时,该字段的名称必须固有地指示对该数据帧的引用。

    < / li>
  3. 您可以在该字段中包括日期,而不必引用另一个表。看起来不太好。只需使用datetime.datetime模块并将对象转储到数据框中即可; Python负责其余的工作。

  4. 变量名也应该是不言自明的:与其使用rpbid,而不必向每个人解释意味着被替换的事物,只需使用replaced_by_id(注意下划线来分隔单词)