gpt4 book ai didi

python - Pandas DataFrame ApplyMap 方法

转载 作者:太空狗 更新时间:2023-10-29 22:22:39 24 4
gpt4 key购买 nike

我想尝试 Pandas DataFrame 对象的 applymap 方法的功能。这是用例:

假设我的 DataFrame df1 如下:

Age   ID       Name
0 27 101 John
1 22 102 Bob
2 19 103 Alok
3 27 104 Tom
4 32 105 Matt
5 19 106 Steve
6 5 107 Tom
7 55 108 Dick
8 67 109 Harry

现在我想创建一个标志变量,其逻辑是如果元素的长度小于 2,则标志 = 1,否则标志 = 0。

为了按元素运行这个,我想使用 applymap 方法。为此,我创建了一个用户定义的函数,如下所示:

def f(x): 
if len(str(x))>2:
df1['Flag']=1
else:
df1['Flag']=0

然后我运行 df1.applymap(f) 得到:

    Age    ID  Name
0 None None None
1 None None None
2 None None None
3 None None None
4 None None None
5 None None None
6 None None None
7 None None None
8 None None None

而不是用标志值创建一个标志变量。如何使用 applymap 实现所需的功能?

我们不能在用户定义的函数中使用 DataFrame 变量名或 pandas 语句吗?即,df1['Flag']f() 的定义中是否有效?

最佳答案

f(x) 函数对 pandas 来说并不特殊——它只是一个常规的 python 函数。因此 f 范围内的唯一数据是变量 x df1 的其他成员不可用。

来自 applymap文档:

func : function

Python function, returns a single value from a single value

所以你可以试试这个:

def f(x):
if len(str(x)) <= 3: return 1
else: return 0

应用时为框架中的每个元素输出 1/0:

df1.applymap(f)

>>>
Age ID Name
0 1 1 0
1 1 1 1
2 1 1 0
3 1 1 1
4 1 1 0
5 1 1 0
6 1 1 1
7 1 1 0
8 1 1 0

要使用结果在每一行中添加另一个变量,您需要每行一个值,例如,

df1['Flag'] = df1.applymap(f).all(axis=1).astype(bool)

>>> df1

Age ID Name Flag
0 27 101 John False
1 22 102 Bob True
2 19 103 Alok False
3 27 104 Tom True
4 32 105 Matt False
5 19 106 Steve False
6 5 107 Tom True
7 55 108 Dick False
8 67 109 Harry False

另请查看 https://stackoverflow.com/a/19798528/1643946其中包括applymap 以及applymap

关于python - Pandas DataFrame ApplyMap 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com