我在python中有下面的case语句,
pd_df['difficulty'] = 'Unknown'
pd_df['difficulty'][(pd_df['Time']<30) & (pd_df['Time']>0)] = 'Easy'
pd_df['difficulty'][(pd_df['Time']>=30) & (pd_df['Time']<=60)] = 'Medium'
pd_df['difficulty'][pd_df['Time']>60] = 'Hard'
但是当我运行代码时,它抛出了一个错误。
A value is trying to be set on a copy of a slice from a DataFrame
3条答案
按热度按时间zqdjd7g91#
为了提高性能,请使用嵌套的
np.where
条件。对于该条件,您可以只使用pd.Series.between
,并且将相应地插入默认值。类似地,使用
np.select
,这为添加条件提供了更多空间:另一个高性能解决方案涉及
loc
:eqqqjvef2#
OP的代码只需要
loc
就可以通过[]
正确地调用__setitem__()
方法,特别是,他们已经使用了正确的括号()
来单独计算&
链接的条件。这种方法的基本思想是用某个默认值(例如
"Unknown"
)初始化列,并根据条件(例如如果0<Time<30
,则为"Easy"
)更新行,等等。当我计算这个页面上给出的选项时,对于大帧,
loc
方法是最快的(比np.select
和嵌套np.where
快4-5倍)。1.1:用于基准的代码。
jucafojl3#
为了可读性起见,就像在R中一样。