使用其他列有条件地更新Pandas DataFrame列

时间:2013-08-23 20:08:19

标签: python pandas

使用如下所示的DataFrame,当c1pos等于零时,如何将c1len设置为零?我想为c2len / c2pos做同样的事情。是否有一种简单的方法可以在不创建一堆列的情况下实现所需的答案?

             distance  c1pos  c1len  c2pos  c2len  daysago
 line_date                                                
 2013-06-22      7.00      9    0.0      9    6.4       27
 2013-05-18      8.50      6    4.6      7    4.9       62
 2012-12-31      8.32      5    4.6      5    2.1      200
 2012-12-01      8.00      7    7.1      6    8.6      230
 2012-11-03      7.00      7    0.0      7    2.7      258
 2012-10-15      7.00      7    0.0      8    5.2      277
 2012-09-22      8.32     10   10.1      8    4.1      300
 2012-09-15      9.00     10   12.5      9   12.1      307
 2012-08-18      7.00      8    0.0      8    9.2      335
 2012-08-02      9.00      5    3.5      5    2.2      351
 2012-07-14     12.00      3    4.5      3    3.5      370
 2012-06-16      8.32      7    3.7      7    5.1      398

1 个答案:

答案 0 :(得分:6)

我认为你没有任何真正满足这些条件的东西,但是 这将有效

这会为相关列的行(例如c2pos)创建一个布尔掩码 是0;然后它将列c2len设置为0表示那些为True

In [15]: df.loc[df.c2pos==0,'c2len'] = 0

In [16]: df.loc[df.c1pos==0,'c1len'] = 0

In [17]: df
Out[17]: 
            distance  c1pos  c1len  c2pos  c2len  daysago
2013-06-22      7.00      9    0.0      9    6.4       27
2013-05-18      8.50      6    4.6      7    4.9       62
2012-12-31      8.32      5    4.6      5    2.1      200
2012-12-01      8.00      7    7.1      6    8.6      230
2012-11-03      7.00      7    0.0      7    2.7      258
2012-10-15      7.00      7    0.0      8    5.2      277
2012-09-22      8.32     10   10.1      8    4.1      300
2012-09-15      9.00     10   12.5      9   12.1      307
2012-08-18      7.00      8    0.0      8    9.2      335
2012-08-02      9.00      5    3.5      5    2.2      351
2012-07-14     12.00      3    4.5      3    3.5      370
2012-06-16      8.32      7    3.7      7    5.1      398