这是我的数据框:
df = pd.DataFrame({'sym': ['msft', 'amd', 'bac', 'citi'], 'close'`: [100, 30, 70, 80]})
这是我要使用的函数的简化形式:
def add_volume(df):
df['volume'] = [1000, 2000, 3000, 4000]
return df
我想将参数传递给该函数,该函数返回所需的行。例如:def add_volume(df, sector = ['tech', 'bank'])
。如果我选择tech
sector
,该函数将返回以下内容:
sym close volume
0 msft 100 1000
1 amd 30 2000
,然后在bank
sector
上返回另外两行。
编辑:我想调用类似add_volume(df, sector = 'tech')
的函数,然后它返回前两行
答案 0 :(得分:1)
您可以执行以下操作:
def add_volume(df,col,params):
df['volume'] = [1000, 2000, 3000, 4000] #better to add this outside the function
df=df[df[col].isin(params)]
return df
add_volume(df,'sym',['msft','amd'])
sym close volume
0 msft 100 1000
1 amd 30 2000
答案 1 :(得分:1)
如果要传递可选参数,则可以执行以下操作:
def add_volume(df, sector=None):
if sector is None:
# do without the sector argument
else
# do with the sector argument
所以知道您可以同时执行以下两个语句:
df = df(add_volume)
df = df(add_volume, sector_list)
希望有帮助
答案 2 :(得分:1)
Amir ...编码不是魔术。代码不能仅仅知道哪个扇区相对于数据意味着什么。
如果您希望词"tech"
,"sector"
等以某种方式与您的数据相关,则需要将它们包括在df中。只有这样,您才能使用功能访问它们。
df = pd.DataFrame({'sym': ['msft', 'amd', 'bac', 'citi'], 'close'`: [100, 30, 70, 80], 'sector': ['tech', 'tech', 'bank','bank']})
# Then you can do
def add_volume(df, sector):
df['volume'] = [1000, 2000, 3000, 4000]
new_df = df[df['sector'].isin(sector)]
return new_df
res = add_volume(df, sector = ['tech'])
sym close volume
0 msft 100 1000
1 amd 30 2000
答案 3 :(得分:0)
您也可以使用此功能:-
df = pd.DataFrame({'sym': ['msft', 'amd', 'bac', 'citi'], 'close': [100, 30, 70, 80],
'sector': ['tech', 'tech', 'bank','bank']})
def add_volume(df, sector='tech'):
df['volume'] = [1000, 2000, 3000, 4000]
df = df[ df['sector']==sector ]
return df
df= add_volume(df) # By default sector is 'tech' AND we can pass 'bank' also.
df
希望对您有帮助。