問題

我正在建立一個函式.此函式的一個輸入將是熊貓資料幀,其中一個任務是使用此資料幀的兩個變數進行一些操作.這兩個變數不是固定的,我想有自由使用引數作為函式的輸入來確定它們.

例如,假設在某個時候我想使用的變數是’var1’和’var2’(但在另一個時候,我可能想使用其他兩個變數).假設這些變數取值為1,2,3,4,我想減少df做var1 = 1和var2 = 1.我的函式是這樣的

 def fun(df , var = ['input_var1', 'input_var2'] , val):
    df = df.rename(columns={  var[1] : 'aux_var1 ', var[2]:'aux_var2'})

    # Other operations
    df  = df.loc[(df.aux_var1 == val ) & (df.aux_var2 == val )] 
    # end of operations

    # recover 
    df = df.rename(columns={ 'aux_var1': var[1] ,'aux_var2': var[2]})
    return df 

 

當我使用函式有趣時,我有錯誤

 fun(df, var = ['var1','var2'], val = 1)
IndexError: list index out of range
 

實際上,我想做其他更復雜的操作,我沒有描述這些操作,以便不擴充套件問題.上面的簡單示例可能有一個不需要重新命名變數的解決方案.但也許這個解決方案不適用於我真正想要做的操作.所以,首先,我必須在重新命名變數時糾正錯誤.如果你想提供另一個不需要重新命名的更優雅的解決方案,我也很感激,但除了優雅的解決方案之外,我將非常感激,你提供關於重新命名的解決方案.

  最佳答案

Python列表是零索引,即第一個元素索引是0. 只是更改行:

 df = df.rename(columns={  var[1] : 'aux_var1 ', var[2]:'aux_var2'})

df = df.rename(columns={ 'aux_var1': var[1] ,'aux_var2': var[2]})
 

 df = df.rename(columns={  var[0] : 'aux_var1 ', var[1]:'aux_var2'})

df = df.rename(columns={ 'aux_var1': var[0] ,'aux_var2': var[1]})
 

分別

  相同標籤的其他問題

python