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

Tra*_*VOX 3 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
Run Code Online (Sandbox Code Playgroud)

Jef*_*eff 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
Run Code Online (Sandbox Code Playgroud)