Pandas根据基于其他列的条件添加值为的列

2024-05-12 20:58:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下熊猫数据框:

enter image description here

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'

导致:

enter image description here

但是我不明白我更喜欢的方式是什么。根据你的申请,所有的方法都一样好吗?


Tags: 数据方法noimportpandasdfisas
1条回答
网友
1楼 · 发布于 2024-05-12 20:58:09

使用timeits,卢克!

enter image description here

结论 列表理解在较小的数据量上表现最好,因为它们产生的开销很少,即使它们没有矢量化。在更大的数据上,locnumpy.where表现得更好-矢量化赢得了胜利。

请记住,方法的适用性取决于数据、条件数和列的数据类型。我的建议是在确定一个选项之前,先对你的数据测试各种方法。

不过,这里有一个值得注意的地方,那就是列表理解非常有竞争力,它们是用C语言实现的,并且在性能上得到了高度优化。


Benchmarking code, for reference。以下是正在计时的函数:

def numpy_where(df):
  return df.assign(is_rich=np.where(df['salary'] >= 50, 'yes', 'no'))

def list_comp(df):
  return df.assign(is_rich=['yes' if x >= 50 else 'no' for x in df['salary']])

def loc(df):
  df = df.assign(is_rich='no')
  df.loc[df['salary'] > 50, 'is_rich'] = 'yes'
  return df

相关问题 更多 >