Python 如何获取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时的当前输出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函数接受更多参数,也就
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@Ericnp.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'))