这是我的数据框:
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
我想将两个可选参数(sector
,watch_list
)传递给函数,以选择想要的行,例如,如果我像这样调用函数
add_volume (df, sector=['tech'], watch_list=[1])
它返回第一行。
如果我这样称呼它
add_volume(df, watch_list = [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