【发布时间】:2016-11-29 11:47:01
【问题描述】:
np.where 具有向量化 if/else 的语义(类似于 Apache Spark 的 when/otherwise DataFrame 方法)。我知道我可以在pandas.Series 上使用np.where,但是pandas 经常定义自己的API 来代替原始的numpy 函数,这通常使用pd.Series/pd.DataFrame 更方便。
果然,我找到了pandas.DataFrame.where。但是,乍一看,它具有完全不同的语义。我找不到使用 pandas where 重写 np.where 最基本示例的方法:
# df is pd.DataFrame
# how to write this using df.where?
df['C'] = np.where((df['A']<0) | (df['B']>0), df['A']+df['B'], df['A']/df['B'])
我是否遗漏了一些明显的东西?还是 pandas 的 where 用于完全不同的用例,尽管名称与 np.where 相同?
【问题讨论】:
-
文档字符串pandas.pydata.org/pandas-docs/stable/generated/… 似乎可以很好地解释它(尽管它可以使用一两个示例)。注意简短描述,以及
cond和other参数的描述,但忽略这些参数可调用的选项。 -
@WarrenWeckesser 在第二次阅读文档时,我想我明白了...类似于
(df.A + df.B).where((df['A']<0) | (df['B']>0), df.A/df.B),对吗?我猜我会删除我的问题。 -
@max:不,不要删除。这可能会在将来对某人有所帮助。
标签: python pandas numpy where-clause