如何应用pandas.map(),其中该函数采用超过1个参数

问题描述 投票:0回答:3

支持我有一个包含概率列的数据框架。现在,我创建一个映射函数,如果概率大于阈值值,则返回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)
我的问题是,最后一行将如何工作,即我如何通过地图功能内的阈值?

python python-3.x pandas dataframe apply
3个回答
9
投票
我们可以使用

Dataframe.applymap


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)
我建议您看到

it


    


4
投票
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))



2
投票

从PANDAS 2.1,您可以在数据框架上的功能。自定义函数的任何额外参数都可以作为关键字参数传递。例如,要将函数映射到使用

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)

提供所需的列。
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.