python - 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
参数的使用?
版本信息
- 蟒蛇 - 3.8.5
- 熊猫 - 1.1.3
解决方案
dropna=False
表示不包括条目全部为 NaN 的列;您的问题是数据透视表未显示以 NaN 作为列名的列。如果将 NaN 值更改为另一个字符串,则数据透视表将按预期工作。
df['b'] = df['b'].fillna('No Value')
推荐阅读
- scroll - 如何在 Flutter 中滚动或跳转到 PageView.builder 或 PageController 的位置?
- firebase - Firebase.Database.FirebaseException:处理请求时发生异常
- java - 我如何随机执行按钮的动作
- r - 将列表转换为R中的DataFrame?错误:获取默认列名(x1、x2、x3..)而不是列表中的名称
- python-3.x - 在我不希望它发生的情况下跳过 for 循环中的索引
- swift - 如何快速实现Appkit的颜色变化?
- vb.net - 如何更新 DataGridView 控件左侧可见代码中的行指针
- reactjs - 使用常量输入参数反应钩子 - 钩子创建者?
- c# - 导入以分号分隔的 CSV 文件
- microsoft-graph-api - 列出显示名称中包含文本的组