【问题标题】:Conditional w/Pandas Dataframe有条件的 w/Pandas 数据框
【发布时间】:2019-02-27 07:52:57
【问题描述】:

需要关于 pandas 数据框条件的帮助。提前为基本问题道歉,或者如果它在其他地方有所涉及。

这是示例数据框:

employee sales revenue salary
12345    20    10000   100000 

根据数据,我有几个条件会导致工资变化。

场景: 如果销售额 > 10 且收入 > 5,000 美元,则加薪 20% 如果销售额 $5,000,则加薪 10% 否则,什么都不做。

variables:
high_sales = 10
low_sales = 5
high_revenue = 5000
big_increase = 1.2
small_increase = 1.1

我知道这需要一些嵌套,但我不清楚该怎么做。

我希望结果是一个只调整了薪水列的数据框。

代码如下:

df['salary'] = np.where((df['sales']>=high_sales & df['revenue'] 
>=high_revenue), df['salary'] * big_increase, (df['sales']<=low_sales & 
df['revenue'] >=high_revenue), df['salary'] * small_increase, df['sales'])

是这样吗?

【问题讨论】:

  • 这就是为什么我不应该尝试从我的手机编辑格式。很抱歉搞砸了。请从底部代码块中取出“here's code”以修复字符串突出显示。

标签: python pandas dataframe if-statement conditional


【解决方案1】:

如果有多个条件,最好使用np.select 而不是np.where

conds = [(df.sales > 10) & (df.revenue > 5000),
         (df.sales < 5) & (df.revenue > 5000)]

choices = [df.salary * 1.2, df.salary * 1.1]

df['salary'] = np.select(conds, choices, default = df.revenue)

【讨论】:

  • 更好,在我看来:df['salary'] *= np.select(conds, [1.2, 1.1], 1).
  • 是的,也许这样更好一些,谢谢指出!
  • 谢谢大家。 “default = df.revenue”部分有什么作用?
  • 那是您在帖子中遇到的否则,什么也不做条件。您可以查看我链接的文档中的默认参数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 2020-08-06
相关资源
最近更新 更多