Python 如何获取np.where以接受更多参数,从而过滤><,和=;不仅仅是>;以及<;?

Python 如何获取np.where以接受更多参数,从而过滤><,和=;不仅仅是>;以及<;?,python,pandas,numpy,dataframe,where,Python,Pandas,Numpy,Dataframe,Where,我正在使用Python3.5,并导入了numpy和pandas库。我创建了一个名为df的数据帧,它有一个从零开始的索引和两列;变化百分比(PofChg)和向上、向下或平坦(U_D_F) 对于U_D_F列,我想在PofChg列的基础上填充单词“向上”、“向下”、“平坦”。向上表示大于零,向下表示小于零,平坦表示等于零 np.where函数似乎运行良好,除了两件事, (1) 当PofChg列中的数字为“零”时,为什么在U_D_F列中显示“向下” (2) 我如何使np.where函数接受更多参数,也就

我正在使用Python3.5,并导入了numpy和pandas库。我创建了一个名为df的数据帧,它有一个从零开始的索引和两列;变化百分比(PofChg)和向上、向下或平坦(U_D_F)

对于U_D_F列,我想在PofChg列的基础上填充单词“向上”、“向下”、“平坦”。向上表示大于零,向下表示小于零,平坦表示等于零

np.where函数似乎运行良好,除了两件事, (1) 当PofChg列中的数字为“零”时,为什么在U_D_F列中显示“向下” (2) 我如何使np.where函数接受更多参数,也就是说,如果df.PofChg大于0,如果true显示“向上”或如果false显示“向下”,我想将其更改为-如果df.PofChg大于0,如果true显示“向上”或如果false显示“向下”,但如果它等于零,则显示“平坦”

这是我打印df时的当前输出

   PofChg U_D_F
0      -1  Down
1       0  Down
2       1    Up
3      -2  Down
4       0  Down
5       5    Up
6       3    Up
7      -6  Down
Press any key to continue . . .
这是我的密码

import pandas as pd
import numpy as np


df = pd.DataFrame({'PofChg':[-1,0,1,-2,0,5,3,-6]})
df['U_D_F'] = np.where(df.PofChg > 0 , 'Up','Down');df

print(df)
在本例中,我将与
np.sign()
结合使用:

In [133]: mp = {-1:'Down', 0:'Flat', 1:'Up'}

In [134]: df['U_D_F'] = np.sign(df.PofChg).map(mp)

In [135]: df
Out[135]:
   PofChg U_D_F
0      -1  Down
1       0  Flat
2       1    Up
3      -2  Down
4       0  Flat
5       5    Up
6       3    Up
7      -6  Down
np.sign():

np.符号类型(df.PofChg)

当PofChg列中的数字为“零”时,为什么在U_D_F列中显示“向下”

这是因为您对
np的条件。其中
为>0,因此,如果为0,则条件失败,并选择替代方案

我想将其更改为-如果df.PofChg>0,如果真显示“向上”,或者如果假显示“向下”,但如果它等于零,则显示“平坦”


如果
df.PofChg>0
,则选择
'Up'
;否则,如果
df.PofChg==0
,它会选择
'Flat'
,否则
'Down'

我不能相信我没有理解为什么它在为零时会显示下来,你的答案很好,谢谢你,我会在它让我知道什么时候是
ndarray.map
一个东西时将它标记为正确?在1.11.1中不存在me@Eric
np.sign(df)
返回一个数据帧(对于series来说也是如此——对我来说有些奇怪)使用np.where和np.sign和map有什么区别?是性能还是偏好?明白了,现在说得通了@Eric是的,在这个例子中是series.map。
In [136]: np.sign(df.PofChg)
Out[136]:
0   -1
1    0
2    1
3   -1
4    0
5    1
6    1
7   -1
Name: PofChg, dtype: int64
In [9]: type(np.sign(df.PofChg))
Out[9]: pandas.core.series.Series
np.where(df.PofChg > 0 , 'Up', np.where(df.PofChg == 0, 'Flat', 'Down'))