将可选参数传递给Pandas中的函数

时间:2019-07-06 21:17:26

标签: python pandas

这是我的数据框:

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]

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

1 个答案:

答案 0 :(得分:2)

您可以使用*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