如何在 Python 中将表达式作为函数关键字传递

How do I pass an expression as a function keyword in Python

我正在努力使我的代码成为 pythonic,但不知道该怎么做:

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

其中 dfSort 是数据框,pd 是 pandas 导入。当然 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) ) 

如果 dfWorkpd.Series 类型,那么你可以使用字典解包,正如 Ashwini 提到的,像这样:

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 对的字典,同时对多个列进行赋值。