支持我有一个包含概率列的数据框架。现在,我创建一个映射函数,如果概率大于阈值值,则返回1,否则返回0。现在,我想通过将其作为参数作为该函数来指定阈值,然后在Pandas DataFrame上映射。
获取以下代码示例:
def partition(x,threshold):
if x<threshold:
return 0
else:
return 1
df = pd.DataFrame({'probability':[0.2,0.8,0.4,0.95]})
df2 = df.map(partition)
我的问题是,最后一行将如何工作,即我如何通过地图功能内的阈值?
df2 = df.applymap(lambda x: partition(x, threshold=0.5))
或只有一列:
df['probability']=df['probability'].apply(lambda x: partition(x, threshold=0.5))
但这不是必需的。您可以做:
df2 = df.ge(threshold).astype(int)
我建议您看到
lambda
用于此目的:
def partition(x,threshold):
if x<threshold:
return 0
else:
return 1
df=pd.DataFrame({'probability':[0.2,0.8,0.4,0.95]})
df['probability']=df['probability'].map(lambda x: partition(x, threshold=0.5))
map
中的每个值,您可以按照以下方式进行操作:
partition
pandas
如果有额外的论点,最好使用
df
:
threshold=0.5
或用def partition(x, threshold):
if x<threshold:
return 0
else:
return 1
df['new'] = df['probability'].map(partition, threshold=0.5)
<2.1
apply()
您可以将额外的论据作为尊严传递给df['new'] = df['probability'].apply(partition, threshold=0.5)
::
functools.partial
说,请尽可能使用矢量化代码。例如,在OP中,
from functools import partial
df['new'] = df['probability'].map(partial(partition, threshold=0.5))
# a bit more legibly
partition_05 = partial(partition, threshold=0.5)
df['new'] = df['probability'].map(partition_05)
提供所需的列。