我正在尝试在熊猫中复制此Stata代码:
forvalues i = 1/6 {
local l1 = ´i' - 1
local l2 = ´i' - 2
gen int mig´i' = 1 if codeL´l1' == codeL´i' & codeF´l2' == codeF´l1' & mig´l1' == 1
}
我的目标是创建列mig1,mig2,mig3等,直到mig6。如果某些条件满足,我希望它们等于1。这些条件基于与名称为codeL1,codeL2,codeL3(直到codeL6)和codeF1,codeF2(直到codeF6)的列之间的关系。
每个新列的代码都遵循以下模式:
df[f'mig{i}']= npwhere(df['codeL{i-1}'] == df['codeL{i}']) &
(df['codeF{i-2}'] == df['codeF{i-1}']) &
(df['mig{i-1}'] ==1, 1).astype(int)
i
是列名的最后一个数字,从1到6。
下面的代码是创建mig3的示例:
df[f'mig3']= npwhere(df['codeL2'] == df['codeL3']) &
(df['codeF1'] == df['codeF2']) &
(df['mig2'] ==1, 1).astype(int)
鉴于所有新列都共享要创建的相似模式,因此我想避免逐列创建列(因为我可以在Stata中做到)。