np.where具有向量化if / else的语义(类似于Apache Spark的when/ otherwiseDataFrame方法)。我知道我可以np.where在pandas上使用Series,但pandas通常会定义自己的API来代替原始numpy函数使用,通常使用pd.Series/更为方便pd.DataFrame。
np.where
when
otherwise
Series
pandas
numpy
pd.Series
pd.DataFrame
果然,我发现了pandas.DataFrame.where。但是,乍一看,它具有完全不同的语义。我找不到一种方法来重写np.where使用pandas的最基本的示例where:
pandas.DataFrame.where
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'])
我是否缺少明显的东西?还是将熊猫where命名为一个完全不同的用例,尽管名称与相同np.where?
尝试:
(df['A'] + df['B']).where((df['A'] < 0) | (df['B'] > 0), df['A'] / df['B'])
的之间的差numpy where和DataFrame where是,默认值是由所提供的DataFrame是,where正在被调用的方法上(文档)。
DataFrame
即
np.where(m, A, B)
大致相当于
A.where(m, B)
如果您希望使用pandas进行类似的调用签名,则可以利用Python中方法调用的工作方式:
pd.DataFrame.where(cond=(df['A'] < 0) | (df['B'] > 0), self=df['A'] + df['B'], other=df['A'] / df['B'])
或不kwargs(注:该参数的位置顺序是从不同的numpy where 参数顺序):
pd.DataFrame.where(df['A'] + df['B'], (df['A'] < 0) | (df['B'] > 0), df['A'] / df['B'])