【问题标题】:Pandas pivot_table dropna param not working as expectedPandas pivot_table dropna 参数未按预期工作
【发布时间】:2021-04-23 17:31:35
【问题描述】:

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

样本数据(取自python pandas: pivot_table silently drops indices with 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 参数的用法?

版本信息

  • Python - 3.8.5
  • 熊猫 - 1.1.3

【问题讨论】:

    标签: python pandas dataframe parameters pivot-table


    【解决方案1】:

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

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

    【讨论】:

    • 文档说相反:dropna : bool, default True Do not include columns whose entries are all NaN. 所以通过将它设置为False,我希望空列被保留而不是被删除。基本上我想了解的是参数的作用是什么?因为将其设置为 FalseTrue 会产生相同的结果。
    猜你喜欢
    • 1970-01-01
    • 2018-10-19
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多