python - 划分对齐的 DataFrame 列时获取 NaN
问题描述
我有一个形式的数据框:
A B C
Cat-1 798.26 456.65 187.56
Cat-2 165165.53 45450.00 4897.57
Cat-3 488565.65 15198.56 15654.65
Cat-4 0.00 54256.35 49878.65
Cat-5 1156.61 789.05 89789.54
Cat-6 0.00 1644.78 6876.15
我试图通过将 B 除以 A 来获得百分比。为此,我使用了以下方法:
if_condition = df['A'] != 0
then = (1 - df['B'].div(df['A']))
else_= 0
df['New Col'] = np.where(if_condition, then, else_)
我期望得到以下结果:
A B C New Col
Cat-1 798.26 456.65 187.56 .5720
Cat-2 165165.53 45450.00 4897.57 .2751
Cat-3 488565.65 15198.56 15654.65 .0311
Cat-4 0.00 54256.35 49878.65 0
Cat-5 1156.61 789.05 89789.54 .6822
Cat-6 0.00 1644.78 6876.15 0
但是,我得到了以下结果:
A B C New Col
Cat-1 798.26 456.65 187.56 NaN
Cat-2 165165.53 45450.00 4897.57 0.2751
Cat-3 488565.65 15198.56 15654.65 0.0311
Cat-4 0.00 54256.35 49878.65 0
Cat-5 1156.61 789.05 89789.54 NaN
Cat-6 0.00 1644.78 6876.15 0
我尝试了其他一些涉及对齐两列的解决方案,但这并没有改变最终结果。什么可能产生这些 NaN 值?
解决方案
您不需要条件,用-np.inf
0 替换:
# df['New Col'] = (1 - df['B'] / df['A']).replace(-np.inf, 0)
df['New Col'] = ((1 - df['B'] / df['A']) * 100).round(2).replace(-np.inf, 0)
print(df)
# Output:
A B C New Col
Cat-1 798.26 456.65 187.56 42.79
Cat-2 165165.53 45450.00 4897.57 72.48
Cat-3 488565.65 15198.56 15654.65 96.89
Cat-4 0.00 54256.35 49878.65 0.00
Cat-5 1156.61 789.05 89789.54 31.78
Cat-6 0.00 1644.78 6876.15 0.00
推荐阅读
- jquery - 模态中的select2不可聚焦
- python - 无法通过代码退出程序
- racket - SICP 练习 1.11 中的球拍错误
- javascript - 在 Angular2 和 Gridster2 中动态添加的元素上动态注入组件
- javascript - 如何在 JavaScript 中创建特殊的 OR 语句
- r - R markdown KableExtra 乳胶表 booktabs 不工作
- string - 使用多个用户输入的 VB 2010 计算器 - “从字符串到整数的转换无效”
- gensim - pyLDAvis 与 Mallet LDA 实现:LdaMallet 对象没有属性“推理”
- perl - 将文本文件解析为嵌套数据结构
- mysql - CakePHP 3.0:由名为 Group 的类引起的 Mysql 语法错误