在熊猫数据框中选择行的函数的条件参数

时间:2019-07-06 09:09:18

标签: python pandas

这是我的数据框:

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')的函数,然后它返回前两行

4 个答案:

答案 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

希望对您有帮助。