向函数中的函数传递可选参数

2024-04-24 08:40:13 发布

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

这是我的数据帧:

df = pd.DataFrame({'sym': ['msft', 'amd', 'bac', 'tsla'], 'close': [100, 30, 70, 80], 'sector': ['tech', 'tech', 'bank', 'auto'], 'watch_list': [1, 2, 2, 1]})

这是我想使用的函数的简化形式:

def add_volume(df):
  df['volume'] = [1000, 2000, 3000, 4000]
  return df

我想将两个可选参数(sectorwatch_list)传递给我的函数,这些参数选择我想要的行,例如,如果我这样调用函数

add_volume (df, sector=['tech'], watch_list=[1])

它返回第一行。你知道吗

如果我这样称呼它

add_volume(df, watch_list = [1]

它返回第一行和最后一行。我希望这两个参数都是可选的。你知道吗


Tags: 数据函数adddataframedf参数techlist
1条回答
网友
1楼 · 发布于 2024-04-24 08:40:13

可以使用*args参数。这允许您在第一个参数(在您的情况下)之后添加任意数量的参数(可选参数),这是必需的。你知道吗

试试这个:

import pandas as pd
df = pd.DataFrame({'sym': ['msft', 'amd', 'bac', 'tsla'], 'close': [100, 30, 70, 80], 'sector': ['tech', 'tech', 'bank', 'auto'], 'watch_list': [1, 2, 2, 1]})

def add_volume(df, *args, **kwargs):
    sector = kwargs.get('sector', None)
    watch_list = kwargs.get('watch_list', None)

    df['volume'] = [1000, 2000, 3000, 4000]
    if sector and watch_list:
        return df[(df['sector']==sector) & (df['watch_list']==watch_list)]
    elif sector:
        return df[df['sector']==sector]
    elif watch_list:
        return df[df['watch_list']==watch_list]
    else:
        return df

print(add_volume(df, sector='tech', watch_list=1)) 
print(add_volume(df, watch_list=1)) 
print(add_volume(df, sector='tech'))
print(add_volume(df))

输出:

   close sector   sym  watch_list  volume
0    100   tech  msft           1    1000

   close sector   sym  watch_list  volume
0    100   tech  msft           1    1000
3     80   auto  tsla           1    4000

   close sector   sym  watch_list  volume
0    100   tech  msft           1    1000
1     30   tech   amd           2    2000

   close sector   sym  watch_list  volume
0    100   tech  msft           1    1000
1     30   tech   amd           2    2000
2     70   bank   bac           2    3000
3     80   auto  tsla           1    4000

相关问题 更多 >