I can use .map(func)
on any column in a df, like:
我可以在df的任何列上使用.map(func),比如:
df=DataFrame({'a':[1,2,3,4,5,6],'b':[2,3,4,5,6,7]})
df['a']=df['a'].map(lambda x: x > 1)
I could also:
我也可以:
df['a'],df['b']=df['a'].map(lambda x: x > 1),df['b'].map(lambda x: x > 1)
Is there a more pythonic way to apply a function to all columns or the entire frame (without a loop)?
是否有更多的python方法将函数应用于所有列或整个框架(没有循环)?
2 个解决方案
#1
36
If I understand you right, you're looking for the applymap
method.
如果我理解正确的话,你就是在寻找applymap方法。
>>> print df
A B C
0 -1 0 0
1 -4 3 -1
2 -1 0 2
3 0 3 2
4 1 -1 0
>>> print df.applymap(lambda x: x>1)
A B C
0 False False False
1 False True False
2 False False True
3 False True True
4 False False False
#2
1
From 0.20.0
onwards, you can use transform
从0.20.0开始,您可以使用transform。
In [578]: df.transform(lambda x: x > 1)
Out[578]:
A B C
0 False False False
1 False True False
2 False False True
3 False True True
4 False False False
In [579]: df
Out[579]:
A B C
0 -1 0 0
1 -4 3 -1
2 -1 0 2
3 0 3 2
4 1 -1 0
And, for this simplistic case, why not just use df > 1
?
对于这个简单的例子,为什么不使用df > 1呢?
In [582]: df > 1
Out[582]:
A B C
0 False False False
1 False True False
2 False False True
3 False True True
4 False False False
#1
36
If I understand you right, you're looking for the applymap
method.
如果我理解正确的话,你就是在寻找applymap方法。
>>> print df
A B C
0 -1 0 0
1 -4 3 -1
2 -1 0 2
3 0 3 2
4 1 -1 0
>>> print df.applymap(lambda x: x>1)
A B C
0 False False False
1 False True False
2 False False True
3 False True True
4 False False False
#2
1
From 0.20.0
onwards, you can use transform
从0.20.0开始,您可以使用transform。
In [578]: df.transform(lambda x: x > 1)
Out[578]:
A B C
0 False False False
1 False True False
2 False False True
3 False True True
4 False False False
In [579]: df
Out[579]:
A B C
0 -1 0 0
1 -4 3 -1
2 -1 0 2
3 0 3 2
4 1 -1 0
And, for this simplistic case, why not just use df > 1
?
对于这个简单的例子,为什么不使用df > 1呢?
In [582]: df > 1
Out[582]:
A B C
0 False False False
1 False True False
2 False False True
3 False True True
4 False False False