熊猫逻辑运算未应用

时间:2020-09-09 03:19:54

标签: python pandas numpy

我想在我的pandas列中给出if条件,但是什么都没有应用。我检查了列的dtypes,它说Float32,我在任何键入中都错了还是有点不知道

我尝试过此代码:

How to use numpy.where with logical operators

Numpy "where" with multiple conditions

multiple if else conditions in pandas dataframe and derive multiple columns

并且我尝试使用numpy.where,但是什么也没有发生。.data ['growth']总是有结果2

我的代码:

data['growth'] = np.where(np.logical_and(data['tqty'] < 0, data['qty_x'] < 0), 1, 2)

我不喜欢使用if或numpy.where

非常感谢

1 个答案:

答案 0 :(得分:2)

尝试使用DataFrame的方法“应用”:

使用此示例数据:

df = pd.DataFrame(data=[(-1, -1), 
                        (-1, 0),
                        (0, -1),
                        (0, 0),
                        (1, 1)],
                  columns=['tqty', 'qtyx'])



|    |   tqty |   qtyx |
|---:|-------:|-------:|
|  0 |     -1 |     -1 |
|  1 |     -1 |      0 |
|  2 |      0 |     -1 |
|  3 |      0 |      0 |
|  4 |      1 |      1 |

您可以使用lambda函数获取此信息:

df['growth'] = df.apply(
    lambda row: 1 if ((row['tqty'] < 0) & (row['qtyx'] < 0))
    else 2, 
    axis=1)

|    |   tqty |   qtyx |   growth |
|---:|-------:|-------:|---------:|
|  0 |     -1 |     -1 |        1 |
|  1 |     -1 |      0 |        2 |
|  2 |      0 |     -1 |        2 |
|  3 |      0 |      0 |        2 |
|  4 |      1 |      1 |        2 |

'Axis = 1'允许您迭代行,并且lambda在每一行上运行以测试这两种情况。