Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧应用映射方法_Python_Pandas - Fatal编程技术网

Python 数据帧应用映射方法

Python 数据帧应用映射方法,python,pandas,Python,Pandas,我想尝试PandasDataFrame对象的applymap方法的功能。以下是用例: 假设我的DataFramedf1如下所示: 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

我想尝试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
def f(x): 
   if len(str(x))>2: 
       df1['Flag']=1
   else: 
      df1['Flag']=0
现在我想创建一个flag变量,其逻辑是,若元素的长度小于2,那个么flag=1,否则flag=0

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

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
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)
不是熊猫特有的,它只是一个常规python函数。因此
f
范围内的唯一数据是变量
x
df1
的其他成员不可用

从文档:

func:函数

Python函数,从单个值返回单个值

所以你可以试试这个:

def f(x):
    if len(str(x)) <= 3: return 1
    else: return 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

另外,请查看包含
apply
map
以及
applymap
的内容,谢谢。只是跟进。在df1['Flag']=df1.applymap(f).sum(axis=1).astype(bool)语句中,当我们按列求和时,第一行的值不应该是2(1+1+0)?。那么bool应该是真的吗?那为什么它是假的呢?是的,对不起-我从
all
函数复制了结果,但在
sum
函数中写入了(bool(sum)为所有行提供了真的,这不是一个好例子)。现在修复。@Baktaawar如果这解决了你的问题,那么除了“谢谢”之外,如果你能接受答案,那就太好了!