我使用的是pandas,有两个数据帧:
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
我的想法是,我想处理两种情况: 1.关闭的记录是该实例的第一个也是最后一个记录(df1
中的id 3
),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
上执行第一个左连接,以获得所有第一个递归连接,然后尝试使用循环来检查rpbid2
是否为空,如果不是,我在df1
中查看df2
的id列中的rpdid2
值,然后我想将合并后的数据帧的后半部分更新为连接中适用的下一步。
这是原始代码:我不能得到它而不是错误
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',这意味着它是该给定订单的第一条记录。
https://stackoverflow.com/questions/51937709
复制相似问题