我尝试将一个新列“Energy_CLASS”添加到 Dataframe “df_Energy”中,它包含字符串“HIGH”,如果“EASSICATION”值>400,则包含字符串“HIGH”;如果“EVERSICE_ENERGY”值在200和400之间,则包含字符串“MEDURE”;如果“EASSICS_ENERGY”值低于200,则包含字符串“Low”。我尝试使用np.where from Numpy,但我发现numpy.where(condition[, x, y])
只处理两种情况,而不是像我这样处理3种情况。
有什么办法可以帮我吗?
先谢谢你
9条答案
按热度按时间jtjikinw1#
试试这个:使用@Maxu中的设置
vybvopom2#
您可以使用ternary:
zynd9foi3#
我喜欢保持代码的整洁。这就是为什么我更喜欢
np.vectorize
来完成这类任务。然后,只需使用以下命令将NumPy数组添加为 Dataframe 中的一列:
这种方法的优点是,如果您希望向列添加更复杂的约束,可以很容易地完成。希望能有所帮助。
ttisahbt4#
我在这里使用cut()方法,它将生成非常高效且节省内存的
category
dtype:zphenhs45#
警告:小心nans
始终要注意,如果您的数据缺少值,
np.where
可能会很难使用,并且可能会无意中给出错误的结果。请考虑以下情况:
或者,您可以使用一个或多个嵌套的
np.where
作为Medium,而不是NaN,这会很难看。我觉得最好的办法是
pd.cut
。它处理NAN,并且易于使用。示例:
pgx2nnw86#
试试这个:即使
consumption_energy
包含空值,也不用担心。a64a0gku7#
让我们首先使用
0
到1000
之间的1000000
随机数创建 Dataframe 作为测试简单介绍一下 Dataframe
实现这一目标的方法多种多样,例如:
1.使用
numpy.where
1.使用
numpy.select
1.使用
numpy.vectorize
1.使用
pandas.cut
1.使用Python的内置模块
1.使用lambda函数
时间对比
在我做过的所有测试中,通过使用
time.perf_counter()
(for other ways to measure time of execution see this)测量时间,pandas.cut
是最快的方法。备注:
pandas.cut
和pandas.qcut
之间的区别,请参阅:What is the difference between pandas.qcut and pandas.cut?xghobddn8#
我再次使用np.vetorize。它比np.where快得多,在代码方面也更干净。使用更大的数据集,你绝对可以看出速度的加快。您可以对条件条件以及这些条件的输出使用词典格式。
ztmd8pv59#
当您只想使用“where”方法但有多个条件时。我们可以通过添加更多(np.where)来添加更多条件,方法与上面相同。再说一次,最后两个将是你想要的。