2017-07-25 23 views
-2

我想是Python的我的代碼,但無法弄清楚如何做到:我如何通過表達式作爲Python中的函數關鍵字

dfSort.assign(i+5=pd.Series(dfWork)) 

其中DFSORT是一個數據幀和Pd是大熊貓進口。當然,i+5是一個表達式,因此不能作爲列名傳遞。但我想在代碼中動態分配一個列名稱(稱爲i+5)。以其他方式做到這一點的唯一方法是(這可能很麻煩):

if (i+5)== 5: 
    dfSort = dfSort.assign(a=pd.Series(dfWork, index=dfSort.index.values)) 

elif (i+5)==6: 
    dfSort = dfSort.assign(b=pd.Series(dfWork, index=dfSort.index.values)) 

elif (i+5)==7: 
    dfSort = dfSort.assign(c=pd.Series(dfWork, index=dfSort.index.values)) 

elif (i+5)==8: 
    dfSort = dfSort.assign(d=pd.Series(dfWork, index=dfSort.index.values)) 

有沒有辦法做到這一點,如第一個代碼塊沒有if語句?

這不起作用:

Colname = {5: 'a',6 : 'b', 7 : 'c', 8 : 'd'} 
dfSort = dfSort.assign(Colname[i+5]=pd.Series(dfWork)) 

回答

1

如果dfWorkpd.Series類型,那麼你可以使用字典拆包,如阿什維尼提到,像這樣:

Colname = {5: 'a',6 : 'b', 7 : 'c', 8 : 'd'} 
i = ... # an integer 

dfSort = dfSort.assign(**{ Colname[i + 5] : pd.Series(dfWork, index=dfSort.index.values) }) 

演示:

In [625]: df 
Out[625]: 
    0 1 2 
0 1 3 4 
1 2 4 5 
2 3 5 6 

In [627]: df.assign(**{Colname[i + 5] : pd.Series(['a', 'b', 'c'], index=df.index.values)}) 
Out[627]: 
    0 1 2 b 
0 1 3 4 a 
1 2 4 5 b 
2 3 5 6 c 

您可以傳遞具有多個k:v對的字典,並執行同時爲多個列進行分配。

+0

嗨,好的,謝謝。我試過這個'dfSort = dfSort.assign(** Colname [i + 4] = pd.Series(dfWork))'原來我需要添加和使用Colon。 – DrizztVD

+0

@DrizztVD是的。你需要解開一個字典。這是一般的解決方案,並且會起作用。如果有幫助,請考慮[標記此答案接受](https://stackoverflow.com/help/someone-answers)。謝謝! –

+0

@DrizztVD我不知道。我以爲你得到了一個錯誤。我誤解了你的評論。我的錯。 –

相關問題