根据传入的名称定义函数的行为

2024-09-27 21:30:45 发布

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

我已经创建了一个函数,但是根据传入函数的名称,我希望函数的行为有所不同

Created函数接收一个dataframe,创建一个数据透视表,并按100或0.01缩放某些列。对于特定类型的数据帧(包含特定列),我不希望缩放平均权重。有没有办法找到传递的df的名称?你知道吗

编辑:

所有的df都有相同的列名,所以要将“SpecialDF”与其他的区别开来,只需将它的名称传递给函数。在这一点上,我应该看看类或装饰?def scale(df)功能相当长,仅此部分需要特殊处理

def scale(df):

    dfpvt= pd.pivot_table(df, values=['Avg Wt', 'Avg Spd'], index=y,aggfunc='sum')

    dfpvt.loc[:['Avg Wt', 'Avg Spd']=dfpvt[['Avg Wt', 'Avg Spd']].apply(lambda x: x/100)

    return dfpvt   

我要找的是

def scale(df):

    dfpvt= pd.pivot_table(df, values=['Avg Wt', 'Avg Spd'], index=y,aggfunc='sum')

    if df==SpecialDF:
        dfpvt.loc[:['Avg Spd']=dfpvt[['Avg Spd']].apply(lambda x: x/100)
    else:
        dfpvt.loc[:['Avg Wt', 'Avg Spd']=dfpvt[['Avg Wt', 'Avg Spd']].apply(lambda x: x/100)
    return dfpvt   

Tags: 数据lambda函数名称dfdeflocavg
2条回答

For a particular type of dataframe (which contains a particular column), I do not want the Avg Weight to be scaled.

使用if或三元语句确定数据帧中是否存在列:

def scale(df):
    dfpvt = pd.pivot_table(df, values=['Avg Wt', 'Avg Spd'], index=y, aggfunc='sum')
    scale_cols = ['Avg Spd'] if 'some_col_label' in df else ['Avg Wt', 'Avg Spd']
    dfpvt.loc[: scale_cols] /= 100
    return dfpvt

其思想是减少重复的代码,只修改更改所需列所需的最基本的对象,在本例中是list对象。你知道吗

对于更通用的函数,可以使用scale_cols作为参数,^{}通过函数创建数据帧:

def scale(df, scale_cols):
    dfpvt = pd.pivot_table(df, values=['Avg Wt', 'Avg Spd'], index=y, aggfunc='sum')
    dfpvt.loc[: scale_cols] /= 100
    return dfpvt

df = df.pipe(scale, ['Avg Spd'] if 'some_col_label' in df else ['Avg Wt', 'Avg Spd'])

all df have the same column names, so to differentiate the "SpecialDF" from others is only by its name passed into the function.

您的最新要求完全不同。名称只是引用:不要依赖它们作为处理条件。好的做法是使用字典来存储数据帧,并使用字典中的键来标识“特殊”数据帧:

dfs = {'df1': df1, 'df2': df2}

def scale(df, scale_cols):
    dfpvt = pd.pivot_table(df, values=['Avg Wt', 'Avg Spd'], index=y, aggfunc='sum')
    dfpvt.loc[: scale_cols] /= 100
    return dfpvt

key = 'df1'
dfs[key] = dfs[key].pipe(scale, ['Avg Spd'] if key == 'df1' else ['Avg Wt', 'Avg Spd'])

基于DataFrame的术语“type”,您需要isinstancedocumentation here)。你知道吗

但是,既然您说“which contains a specific column”,您可能实际上是指if col in df,其中col是该特定列的名称。你知道吗

相关问题 更多 >

    热门问题