如何在循环内创建本地宏(相当于Stata)?

时间:2019-07-23 14:41:17

标签: python pandas stata

我正在尝试在熊猫中复制此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中做到)。

0 个答案:

没有答案