python - 如何摆脱 Series.value_counts 中的 0 和 NaN?
问题描述
如果有一个包含几列的 df,其中单元格值可以是 0、1、3、4、5 以及 nan。
第 2 栏:
[4, 4, 3, 2, 4, 4, 5, 2, 4, 3, 2, 3, 2, 5, 3, 2, 3, 3, 3, 2, 2, 3, 4, 3, 5, 5, 5, 4, 5, 4, 2, 4, 2, 5, 4, 3, 1, 4, 4, 3, 3, 5, 3, 3, 3, 5, 3, 5, 4, 3, 5, 4, 4, 5, 4, 2, 1, 4, 3, 5, 4, 0, 0]
第 3 栏
[4, 4, 5, 4, 5, 4, 5, 5, 5, 4, 3, 4, 5, 4, 4, 3, 5, 5, 5, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 4, 5, 3, 5, 4, 4, 2, 5, 4, 4, 5, 5, 5, 5, 4, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 4, 4, 4, 4, 3, 5, 0, 0]
我想创建一个表,为我提供每一行的值计数。这就是我所做的:
df.apply(pd.Series.value_counts). reset_index()
我不想计算 0 和 NaN,我该怎么办?另外,我可以得到百分比而不是数字吗?
我尝试在括号中添加 dropna=True 和 normalize=True ,导致此错误消息:
value_counts() missing 1 required positional argument: 'self'
这可能是达到我想要的输出的另一种方法,但仍需要过滤 0 和 NaN:
df1 = (df.melt('column1')
.pivot_table(index='variable',
columns='value',
aggfunc='size',
)
.rename_axis(index=None, columns=None))
解决方案
我相信您需要替换0
为NaN
s 并value_counts
使用normalize=True
per axis=0
:
df1 = df.replace(0, np.nan).apply(pd.value_counts, normalize=True)
如果需要的话axis=1
:
df2 = df.replace(0, np.nan).apply(pd.value_counts, normalize=True, axis=1)
推荐阅读
- python - Python计算磁盘使用量1000倍的du
- java - 找不到路径 PostgreSQLContainer testContainers
- spring - 在 SpringBoot 中测试 RestTemplate
- android - android 您不能将自定义标题与其他标题功能结合使用
- html - 如何在导航菜单中的 CSS 中解决这些问题?
- less - LESS 中的媒体查询和 if else 语句
- github - 您可以自定义贡献者在您的 Github 项目问题选项卡上看到的内容吗?
- javascript - 将对象添加到特定的 json PHP 数组
- android - 从 sqlite 数据库中删除表中的整行
- android - 当 taskAffinity 活动正在调用 finish() 但它不会关闭最近的应用程序