如何在 Python Pandas 数据框列上执行数学运算,但前提是满足特定条件?

新手上路,请多包涵

我有一个正在使用的 Pandas 数据框,我只需要将某个列中大于 800 的所有值除以 100。换句话说,如果“credit_score”列中的值大于 800,它可以假设输入的数据在小数点左侧有两个额外的位置。例如…

 id    credit_score    column_b    column_c
0     750             ...         ...
1     653             ...         ...
2     741             ...         ...
3     65100           ...         ...
4     73500           ...         ...
5     565             ...         ...
6     480             ...         ...
7     78900           ...         ...
8     699             ...         ...
9     71500           ...         ...

所以我基本上想将行索引 3、4、7 和 9 的信用分数除以 100,而不是其他的。我想要新的、有效的值来替换旧的、无效的值。或者,“credit_score_fixed”等新列也可以使用。我是 Python 和 Pandas 的新手,所以非常感谢任何帮助。

原文由 ScottP 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 595
2 个回答

您可以使用 mask

 df.credit_score = df.credit_score.mask( df.credit_score > 800, df.credit_score/ 100)

或者 numpy.where

 df.credit_score = np.where( df.credit_score > 800, df.credit_score/ 100, df.credit_score)

print (df)
   id  credit_score    col   col1
0   0           750  750.0  750.0
1   1           653  653.0  653.0
2   2           741  741.0  741.0
3   3         65100  651.0  651.0
4   4         73500  735.0  735.0
5   5           565  565.0  565.0
6   6           480  480.0  480.0
7   7         78900  789.0  789.0
8   8           699  699.0  699.0
9   9         71500  715.0  715.0

原文由 jezrael 发布,翻译遵循 CC BY-SA 3.0 许可协议

我会使用 Pandas 布尔索引

 In [193]: df.loc[df.credit_score > 800, 'credit_score'] /= 100

In [194]: df
Out[194]:
    credit_score
id
0          750.0
1          653.0
2          741.0
3          651.0
4          735.0
5          565.0
6          480.0
7          789.0
8          699.0
9          715.0

原文由 MaxU - stop russian terror 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题