我有以下熊猫数据框:
import pandas as pd
import numpy as np
d = {'age' : [21, 45, 45, 5],
'salary' : [20, 40, 10, 100]}
df = pd.DataFrame(d)
并希望添加一个名为“is_rich”的额外列,该列记录一个人是否富有取决于他的/她的工资。我找到了多种方法来实现这一点:
# method 1
df['is_rich_method1'] = np.where(df['salary']>=50, 'yes', 'no')
# method 2
df['is_rich_method2'] = ['yes' if x >= 50 else 'no' for x in df['salary']]
# method 3
df['is_rich_method3'] = 'no'
df.loc[df['salary'] > 50,'is_rich_method3'] = 'yes'
导致:
但是我不明白我更喜欢的方式是什么。根据你的申请,所有的方法都一样好吗?
使用
timeits
,卢克!结论 列表理解在较小的数据量上表现最好,因为它们产生的开销很少,即使它们没有矢量化。在更大的数据上,
loc
和numpy.where
表现得更好-矢量化赢得了胜利。请记住,方法的适用性取决于数据、条件数和列的数据类型。我的建议是在确定一个选项之前,先对你的数据测试各种方法。
不过,这里有一个值得注意的地方,那就是列表理解非常有竞争力,它们是用C语言实现的,并且在性能上得到了高度优化。
Benchmarking code, for reference。以下是正在计时的函数:
相关问题 更多 >
编程相关推荐