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

2024-10-04 01:29:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对代码进行pythonic操作,但不知道如何执行:

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) ) 

Tags: 数据代码indexif表达式动态pythonicseries
1条回答
网友
1楼 · 发布于 2024-10-04 01:29:41

如果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对的字典,并同时对多个列执行赋值。你知道吗

相关问题 更多 >