用正数创建数据帧行,另一行用negati

2024-05-15 10:44:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为Utilidad

    Argentina Bolivia   Chile   España  Uruguay
2004       3     6       1        3       2
2005       5     1       4        1       5

我用

^{pr2}$

现在我尝试创建两个额外的行,一个是正值时的差分结果,另一个是负的,类似这样

    Argentina Bolivia   Chile   España  Uruguay
2004       3     6       1        3       2
2005       5     1       4        1       5
resta      2    -5       3       -2       3
positive   2     0       3        0       3
negative   0    -5       0       -2       0   

我唯一能做的就是增加一个专栏,告诉我“resta”是否为正,使用


Utilidad.ix['boleano'][Utilidad.ix['resta']>0]

有人能帮我创建这两行吗?在

谢谢


Tags: 差分ixnegativechilepositive专栏espaargentina
3条回答

numpy.clip在这里很方便,或者只计算它。在

In [35]:

Utilidad.ix['positive']=np.clip(Utilidad.ix['resta'], 0, np.inf)
Utilidad.ix['negative']=np.clip(Utilidad.ix['resta'], -np.inf, 0)
#or
Utilidad.ix['positive']=(Utilidad.ix['resta']+Utilidad.ix['resta'].abs())/2
Utilidad.ix['negative']=(Utilidad.ix['resta']-Utilidad.ix['resta'].abs())/2
print Utilidad
          Argentina  Bolivia  Chile  España  Uruguay
id                                                  
2004              3        6      1       3        2
2005              5        1      4       1        5
resta             2       -5      3      -2        3
positive          2        0      3       0        3
negative          0       -5      0      -2        0

[5 rows x 5 columns]

一些速度比较:

^{pr2}$

这里要注意的是负数是0和行的最小值:

In [11]: np.minimum(df.loc['resta'], 0)  # negative
Out[11]:
Argentina    0
Bolivia     -5
Chile        0
España      -2
Uruguay      0
Name: resta, dtype: int64

In [12]: np.maximum(df.loc['resta'], 0)  # positive
Out[12]:
Argentina    2
Bolivia      0
Chile        3
España       0
Uruguay      3
Name: resta, dtype: int64

注意:如果您关心速度,那么转置数据帧是有意义的,因为追加列比追加行要便宜得多。

可以使用loc:

^{pr2}$

您可以使用numpy.where

df.ix['positive'] = np.where(df.ix['resta'] > 0, df.ix['resta'], 0)
df.ix['negative'] = np.where(df.ix['resta'] < 0, df.ix['resta'], 0)

相关问题 更多 >