使用 pandas apply 时如何将参数输入函数

How to enter parameters into a function when using pandas apply

第一次在这里发帖 - 决定在 Covid-19 强制休假期间尝试学习如何使用 python。

我试图从一个非常简单的数据库中总结一些数据,并且一直在使用 value_counts 函数。

而不是 运行 它在每一列上单独显示,我想循环遍历每一列和 return 摘要 table。我可以使用 df.apply(pd.value_counts) 来做到这一点,但无法弄清楚如何将参数输入到值计数中,因为我想让 dropna = False.

我有的基本数据示例:

# 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

使用apply函数时如何输入dropna=False?我喜欢下面输出的 table,但希望 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

如有任何帮助,我们将不胜感激!

您可以使用 df.apply,像这样:

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

在pandas apply 函数中,如果只有一个参数,你只需做:

.apply(func_name)

参数为单元格的值。 这与 pandas 内置函数以及用户定义函数 (UDF) 的工作方式完全相同。

对于UDF,当有多个参数时:

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

参见:this link