如何在熊猫数据框中的每列中包含NaN计数的列上应用函数?

时间:2019-10-10 21:53:07

标签: python pandas dataframe

我需要对熊猫数据框中的每一列应用一个函数,该函数在每一列中都包含NaN计数。说我有这个数据框:

import pandas as pd

df = pd.DataFrame({'Baseball': [3, 1, 2], 'Soccer': [1, 6, 7], 'Rugby': [8, 7, None]})

   Baseball  Soccer  Rugby
0         3       1    8.0
1         1       6    7.0
2         2       7    NaN

我可以使用以下方法获取每列中的NaN计数:

df.isnull().sum()

Baseball    0
Soccer      0
Rugby       1

但是我无法弄清楚如何使用该结果将函数应用于每个列。举个例子,我想将一列中的NaN数添加到该列中的每个元素以获得:

   Baseball  Soccer  Rugby
0         3       1    9.0
1         1       6    8.0
2         2       7    NaN

(我的实际功能更复杂。)我尝试过:

def f(x, y):
    return x + y

df2 = df.apply(lambda x: f(x, df.isnull().sum()))

然后我就彻底被弄糊涂了:

          Baseball  Soccer  Rugby
0              NaN     NaN    NaN
1              NaN     NaN    NaN
2              NaN     NaN    NaN
Baseball       NaN     NaN    NaN
Rugby          NaN     NaN    NaN
Soccer         NaN     NaN    NaN

有人知道如何在应用于每一列的函数中使用每一列中的NaN计数吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

感谢Datanovice和vb_rises,答案是:

df.apply(lambda x : x + df.isnull().sum(), axis=1)

如果有人有类似的问题,我希望答案是明确的,而无需通读注释。我曾以为Pandas中的axis = 1(列方向)是默认设置,但似乎并非所有方法都如此。

答案 1 :(得分:0)

我更喜欢@ALollz的答案; df.add(df.isnull().sum())

lambda函数@Dribbler定义的形式已经以.add()的形式存在。