Python 数据帧应用映射方法
我想尝试PandasPython 数据帧应用映射方法,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
DataFrame
对象的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 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如果这解决了你的问题,那么除了“谢谢”之外,如果你能接受答案,那就太好了!