Как ввести параметры в функцию при применении pandas - PullRequest
1 голос
/ 04 апреля 2020

Первое размещение здесь - решили попробовать и научиться использовать python во время вынужденного отпуска Covid-19.

Я пытаюсь обобщить некоторые данные из довольно простой базы данных и использую функцию value_counts.

Вместо того, чтобы запускать его для каждого столбца в отдельности, я бы хотел l oop для каждого столбца и вернуть сводную таблицу. Я могу сделать это с помощью df.apply (pd.value_counts), но не могу понять, как вводить параметры в число значений, поскольку я хочу, чтобы dropna = False.

Basi c пример данных У меня есть:

# Import libraries 
import pandas as pd 
import numpy as np

# create list of winners and runnerup
data = [['john', 'barry'], ['john','barry'], [np.nan,'barry'], ['barry','john'],['john',np.nan],['linda','frank']] 

# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['winner', 'runnerup']) 

# print dataframe. 
df

Как я делал подсчет значений для каждого столбца:

#Who won the most?
df['winner'].value_counts(dropna=False)

Output:
john     3
linda    1
barry    1
NaN      1
Name: winner, dtype: int64

Как я могу ввести dropna = False при использовании функции apply? Мне нравится таблица, которую она выводит ниже, но я хочу, чтобы NaN появлялся в списке.

#value counts table
df.apply(pd.value_counts)
      winner    runnerup
barry   1.0       3.0
frank   NaN       1.0
john    3.0       1.0
linda   1.0       NaN

#value that is missing from list
#NaN    1.0       1.0

Буду признателен за любую помощь !!

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

В pandas применить функцию, если есть один параметр, вы просто делаете:

.apply(func_name)

Параметром является значение ячейки. Это работает точно так же как для встроенной функции pandas, так и для пользовательских функций (UDF).

для UDF, когда имеется более одного параметра:

.apply(func_name, args=(arg1, arg2, arg3, ...))

См .: эта ссылка

0 голосов
/ 04 апреля 2020

Вы можете использовать df.apply, например:

df.apply(pd.value_counts, dropna=False)
...