40

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

请参阅下面显示的 DataFrame,

   data desired_output
0     1          False
1     2          False
2     3           True
3     4           True

我的原始数据显示在“数据”列中,并且desired_output 显示在它旁边。如果 'data' 中的数字低于 2.5,则 desired_output 为 False。

我可以应用一个循环并重新构建 DataFrame ......但这将是“un-pythonic”

4

4 回答 4

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

您想要应用一个函数,该函数根据选定的数据框列有条件地返回一个值。

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

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

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
于 2013-02-05T18:35:28.293 回答
29

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

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
于 2013-02-05T21:34:52.340 回答
15
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
于 2017-03-17T02:47:57.750 回答
13

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

df['desired_output'] = df.le(2.5)

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

于 2013-02-05T21:58:25.553 回答