如何将条件逻辑应用于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)
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小于gt和ge.
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)