python-3.x - 将 dropna 设置为 True 的 Pandas groupby 生成错误的输出

标签 python-3.x pandas pandas-groupby

在下面的片段中:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
        "a": [1, 2, 3, 4, 5, 6, 7, 8, 9], 
        "b": [1, np.nan, 1, np.nan, 2, 1, 2, np.nan, 1]
    }
)
df_again = df.groupby("b", dropna=False).apply(lambda x: x)

我原以为 dfdf_again 是相同的。但他们不是:

df
   a    b
0  1  1.0
1  2  NaN
2  3  1.0
3  4  NaN
4  5  2.0
5  6  1.0
6  7  2.0
7  8  NaN
8  9  1.0

df_again
   a    b
0  1  1.0
2  3  1.0
4  5  2.0
5  6  1.0
6  7  2.0
8  9  1.0

现在,如果我稍微调整 lambda 表达式以“查看”发生了什么 df.groupby("b", dropna=False).apply(lambda x: print(x)) 我实际上可以想象 df 的部分 code>bNaN 已处理。

我在这里错过了什么? (使用 Pandas 1.3.1 和 numpy 1.20.3)

最佳答案

因为NoneNone是一回事:

>>> None == None
True
>>> 

你必须使用np.nan:

>>> np.NaN == np.NaN
False
>>> 

那么试试这个:

df = pd.DataFrame(
    {
        "a": [1, 2, 3, 4, 5, 6, 7, 8, 9], 
        "b": [1, np.NaN, 1, np.NaN, 2, 1, 2, np.NaN, 1]
    }
)
df_again = df.groupby("b", dropna=False).apply(lambda x: x)

现在 dfdf_again 是一样的:

>>> df
   a    b
0  1  1.0
1  2  NaN
2  3  1.0
3  4  NaN
4  5  2.0
5  6  1.0
6  7  2.0
7  8  NaN
8  9  1.0
>>> df_again
   a    b
0  1  1.0
1  2  NaN
2  3  1.0
3  4  NaN
4  5  2.0
5  6  1.0
6  7  2.0
7  8  NaN
8  9  1.0
>>> df.equals(df_again)
True
>>> 

关于python-3.x - 将 dropna 设置为 True 的 Pandas groupby 生成错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68918019/

相关文章:

python-3.x - 模块 'instaloader' 没有属性 'Instaloader'

pandas: to_dict ("records") 舍入不正确

python - Pandas:分组后获取前 10 个值

python - 如何在同一列上进行分组和聚合

python - 无法通过在 python 3.4 上运行的 pip 安装模块

python-3.x - 运行 pip3 install pandas_datareader 后,Jupyter (Anaconda) 中没有名为 'pandas_datareader' 的模块

python - pd.to_numeric 将整个系列转换为 NaN

Python : FileNotFoundError: File b'fleet. csv'不存在

python - 将列添加到 groupby 数据框

python - 如何在 Python 3 中迭代模块列表并调用它们的方法