首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >基于条件的Python递归更新

基于条件的Python递归更新
EN

Stack Overflow用户
提问于 2018-08-21 03:56:08
回答 1查看 146关注 0票数 1

我使用的是pandas,有两个数据帧:

df1

代码语言:javascript
复制
    id date status rpbid rpfid
     1  d1   closed null  10
     2  d2   closed null  11
     3  d3   closed null  null

df2

代码语言:javascript
复制
     id date status  rpbid rpfid
     10 d10  updated 1     null
     11 d11  updated 2     9
     9  d9   updated 11    null

我的想法是,我想处理两种情况: 1.关闭的记录是该实例的第一个也是最后一个记录(df1中的id 3),2.关闭的记录有一个更新的记录链接在df2中。rfbidrpbid用于replacedbyidreplacementforid,因此生成的df为:

代码语言:javascript
复制
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上执行第一个左连接,以获得所有第一个递归连接,然后尝试使用循环来检查rpbid2是否为空,如果不是,我在df1中查看df2的id列中的rpdid2值,然后我想将合并后的数据帧的后半部分更新为连接中适用的下一步。

这是原始代码:我不能得到它而不是错误

代码语言:javascript
复制
import pandas as pd

df = pd.read_csv(filename)


df_initial = df.loc[df['LetterStatus']=='CLOSED']
dfx = df.loc[df['LetterStatus']=='UPDATED']


df_merged = pd.merge(df_initial,dfx,how='left',left_on='ReferenceNumber',right_on='ReplacedByRefNumber')
df_copy = df_merged
for row in range(len(df_merged)):
    if  len(str(df_merged.iloc[row]['ReplacedByRefNumber_y'])) > 1:
        row_slice = dfx.iloc[['ReferenceNumber']==df_merged[row['ReplacedByRefNumber_y']]
        if row_slice.size == 0:
            df_merged.iloc[row]['ReplacedByRefNumber_y']='Unknown'
            df_copy.iloc[row]['ReplacedByRefNumber_y']='Unknown'
        else:
            df_copy.iloc[row][24:0]=row_slice


print(df_copy)

了解更多上下文;如果replacedbyID为null并且状态为'updated',这意味着它是该给定订单的第一条记录。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51937709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档