1

データフレームで 2 つの列を使用する関数があります。

def create_time(var, var1):  
    if var == "Helår":  
        y = var1+'Q4'  
    else:  
        if var == 'Halvår':  
            y = var1+'Q2'  
        else:  
            y = var1+'Q'+str(var)[0:1]  
    return y   

ここで、データフレームをループして、関数を使用して新しい列を作成します。ここで、var と var1 はデータフレームの列です。

私は次のことを試みますが、運がありません:

for row in bd.iterrows():
      A = str(bd['Var'])    
      B = str(bd['Var1'])
      bd['period']=create_time(A,B)
4

1 に答える 1

1

ループは最後の手段です。通常、DataFrame 全体を操作する「ベクトル化された」方法があり、これは常により高速で、通常はより読みやすくなります。

カスタム関数を各行に適用するapplyには、キーワード引数とともに使用しますaxis=1

bd['period'] = bd[['Var', 'Var1']].apply(lambda x: create_time(*x), axis=1)

なぜそれだけではないのか不思議に思うかもしれませんbd.apply(create_time)。2 つの引数が必要なのでcreate_time、行を 2 つの値に「アンパック」し、xそれらを関数に渡す必要があります。

于 2013-10-16T13:03:48.567 に答える