熊猫- pandas中的案例和默认情况

2024-05-13 21:00:17 发布

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

下面是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)] = 'Meduim'
pd_df['difficulty'][pd_df['Time']>60] = 'Hard'

但当我运行代码时,它会抛出一个错误。

A value is trying to be set on a copy of a slice from a DataFrame

Tags: 代码dftimeisvalue错误easy语句
1条回答
网友
1楼 · 发布于 2024-05-13 21:00:17

选项1
对于性能,请使用嵌套的np.where条件。对于条件,您可以只使用pd.Series.between,默认值将相应地插入。

pd_df['difficulty'] = np.where(
     pd_df['Time'].between(0, 30, inclusive=False), 
    'Easy', 
     np.where(
        pd_df['Time'].between(0, 30, inclusive=False), 'Medium', 'Unknown'
     )
)

选项2
类似地,使用np.select,这为添加条件提供了更大的空间:

pd_df['difficulty'] = np.select(
    [
        pd_df['Time'].between(0, 30, inclusive=False), 
        pd_df['Time'].between(30, 60, inclusive=True)
    ], 
    [
        'Easy', 
        'Medium'
    ], 
    default='Unknown'
)

选项3
另一个有效的解决方案是loc

pd_df['difficulty'] = 'Unknown'
pd_df.loc[pd_df['Time'].between(0, 30, inclusive=False), 'difficulty'] = 'Easy'
pd_df.loc[pd_df['Time'].between(30, 60, inclusive=True), 'difficulty'] = 'Medium'

相关问题 更多 >