Pandas DataFrame上的条件逻辑

nit*_*tin 27 python pandas

如何将条件逻辑应用于Pandas DataFrame.

请参见下面显示的DataFrame,

   data desired_output
0     1          False
1     2          False
2     3           True
3     4           True
Run Code Online (Sandbox Code Playgroud)

我的原始数据显示在"数据"列中,而next_output显示在其旁边.如果'data'中的数字低于2.5,则desired_output为False.

我可以应用一个循环并重新构建DataFrame ......但这将是'非pythonic'

Zel*_*ny7 52

In [1]: df
Out[1]:
   data
0     1
1     2
2     3
3     4
Run Code Online (Sandbox Code Playgroud)

您希望应用基于所选数据框列有条件地返回值的函数.

In [2]: df['data'].apply(lambda x: 'true' if x <= 2.5 else 'false')
Out[2]:
0     true
1     true
2    false
3    false
Name: data
Run Code Online (Sandbox Code Playgroud)

然后,您可以将返回的列分配给数据框中的新列:

In [3]: df['desired_output'] = df['data'].apply(lambda x: 'true' if x <= 2.5 else 'false')

In [4]: df
Out[4]:
   data desired_output
0     1           true
1     2           true
2     3          false
3     4          false
Run Code Online (Sandbox Code Playgroud)

  • 不建议将 `apply` + `lambda` 用于易于矢量化的操作。使用 `np.where` 或 `loc` 方法来代替使用 Pandas / NumPy 向量化。 (3认同)

Jan*_*ins 23

只需将该列与该值进行比较:

In [9]: df = pandas.DataFrame([1,2,3,4], columns=["data"])

In [10]: df
Out[10]: 
   data
0     1
1     2
2     3
3     4

In [11]: df["desired"] = df["data"] > 2.5
In [11]: df
Out[12]: 
   data desired
0     1   False
1     2   False
2     3    True
3     4    True
Run Code Online (Sandbox Code Playgroud)


And*_*den 12

在此特定示例中,DataFrame只有一列,您可以优雅地将其写为:

df['desired_output'] = df.le(2.5)
Run Code Online (Sandbox Code Playgroud)

le测试元素是否小于或等于2.5,同样lt小于gtge.


Sur*_*rya 10

In [34]: import pandas as pd

In [35]: import numpy as np

In [36]:  df = pd.DataFrame([1,2,3,4], columns=["data"])

In [37]: df
Out[37]: 
   data
0     1
1     2
2     3
3     4

In [38]: df["desired_output"] = np.where(df["data"] <2.5, "False", "True")

In [39]: df
Out[39]: 
   data desired_output
0     1          False
1     2          False
2     3           True
3     4           True
Run Code Online (Sandbox Code Playgroud)