gpt4 book ai didi

python - 定义函数的行为方式,取决于传入的名称

转载 作者:行者123 更新时间:2023-12-01 01:14:05 26 4
gpt4 key购买 nike

我创建了一个函数,但根据传递给函数的名称,我希望函数有不同的行为

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

编辑:

所有 df 都具有相同的列名称,因此只能通过传递到函数中的名称来区分“SpecialDF”和其他 df。此时我应该查看类或装饰器吗? defscale(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

最佳答案

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 作为参数,并 pipe通过该函数您的数据框:

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

关于python - 定义函数的行为方式,取决于传入的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54534678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com