Это мой фрейм данных:

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'), а затем он возвращает первые две строки

-1
Amir 6 Июл 2019 в 12:09

4 ответа

Лучший ответ

Амир ... Кодирование не волшебство. Код не может просто знать, что означает сектор по отношению к данным.

Если вы хотите, чтобы слова "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
1
Akaisteph7 6 Июл 2019 в 09:54

Вы можете сделать что-то вроде ниже:

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
anky_91 6 Июл 2019 в 09:20

Вы также можете использовать это: -

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

Я надеюсь, что это может помочь вам.

0
Rahul charan 6 Июл 2019 в 09:51

Если вы хотите передать необязательный аргумент, вы можете сделать это:

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)

Надеюсь, это поможет

1
Kevin Winata 6 Июл 2019 в 09:21