如何将条件逻辑应用于Pandas DataFrame。
参见下面显示的DataFrame,
data desired_output
0 1 False
1 2 False
2 3 True
3 4 True
我的原始数据显示在“数据”列中,而next_output显示在旁边。如果'data'中的数字低于2.5,则desired_output为False。
我可以应用一个循环并重新构建DataFrame ......但那将是'un-pythonic'
答案 0 :(得分:49)
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
答案 1 :(得分:22)
只需将该列与该值进行比较:
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
答案 2 :(得分:12)
在此特定示例中,DataFrame只有一列,您可以优雅地将其写为:
df['desired_output'] = df.le(2.5)
le
测试元素是否小于或等于2.5,类似lt
小于,gt
和ge
。
答案 3 :(得分:9)
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