【问题标题】:Conditioning in pandas大熊猫的调理
【发布时间】:2017-10-23 20:48:13
【问题描述】:

在添加新列“Size_Category”后,我正在尝试获取一个 pandas 数据框并返回一个 pandas 数据框对象,该列的值根据某些条件为 small medium 或 large。

mod_df = df.copy(deep=True)
mod_df.loc[(mod_df['Length'] <= 300 , 'Size_Category')] = 'small' # condition, new_column
mod_df.loc[(mod_df['Length'] <= 300 | mod_df['Length'] > 450) , 'Size_Category')] = 'medium' # condition, new_column
mod_df.loc[(mod_df['Length'] >= 450, 'Size_Category')] = 'large' # condition, new_column

当我这样做时,它给了我一个错误提示

Series 的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

我该如何处理?

【问题讨论】:

  • 如果我的回答有帮助,别忘了accept。谢谢。

标签: python pandas


【解决方案1】:

你错过了()

mod_df.loc[(mod_df['Length'] <= 300) | (mod_df['Length'] > 450) , 'Size_Category')]

另一种解决方案是使用cut:

df = pd.DataFrame({'Length': [0,10,300,400,449,450,500]})

bins = [-np.inf, 300, 449, np.inf]
labels=['small','medium','large']
df['Size_Category'] = pd.cut(df['Length'], bins=bins, labels=labels)
print (df)
   Length Size_Category
0       0         small
1      10         small
2     300         small
3     400        medium
4     449        medium
5     450         large
6     500         large

【讨论】:

    猜你喜欢
    • 2019-07-08
    • 1970-01-01
    • 2019-07-26
    • 2018-06-29
    • 2014-08-18
    • 2018-09-14
    • 2014-10-04
    • 2021-12-24
    相关资源
    最近更新 更多