首页 > 解决方案 > Pandas pivot_table dropna 参数未按预期工作

问题描述

我正在旋转一个数据框来查看组内的唯一值计数。我知道一些分组列有空值,我想包括它们。我可以使用 a 轻松完成此操作,.groupby([...], dropna=False)但我想使用.pivot_table它,因为它可以在一个函数中处理取消堆叠、空值填充、总计等。

样本数据(取自python pandas:pivot_table 用 nans 静默删除索引

a = [['a', 'b', 12, 12, 12], ['a', np.nan, 12.3, 233., 12], ['b', 'a', 123.23, 123, 1], ['a', 'b', 1, 1, 1.]]

df = pd.DataFrame(a, columns=['a', 'b', 'c', 'd', 'e'])

print(df)

   a    b       c      d     e
0  a    b   12.00   12.0  12.0
1  a  NaN   12.30  233.0  12.0
2  b    a  123.23  123.0   1.0
3  a    b    1.00    1.0   1.0

用于.groupby获得所需的结果

using_groupby = df.groupby([
    "a",
    "b"
], dropna=False).c.nunique().unstack(fill_value=0)

print(using_groupby)



b  a  b  NaN
a           
a  0  2    1
b  1  0    0

我期望的代码会产生类似的结果.pivot_table

using_pivot_table = df.pivot_table(
    index="a",
    columns="b",
    values="c",
    aggfunc="nunique",
    fill_value=0,
    dropna=False
)

print(using_pivot_table)



b  a  b
a      
a  0  2
b  1  0

问题

这是pivot_table函数中的错误吗?还是我不了解dropna参数的使用?

版本信息

标签: pythonpandasdataframeparameterspivot-table

解决方案


dropna=False表示不包括条目全部为 NaN 的列;您的问题是数据透视表未显示以 NaN 作为列名的列。如果将 NaN 值更改为另一个字符串,则数据透视表将按预期工作。

df['b'] = df['b'].fillna('No Value')

推荐阅读