【问题标题】:Pandas DataFrame: apply function to all columnsPandas DataFrame:将函数应用于所有列
【发布时间】:2012-09-26 07:19:37
【问题描述】:

我可以在 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)

我也可以:

df['a'],df['b']=df['a'].map(lambda x: x > 1),df['b'].map(lambda x: x > 1)

是否有更 Pythonic 的方式将函数应用于所有列或整个框架(没有循环)?

【问题讨论】:

  • 将您的lambda 简化为lambda x: x > 1
  • @Blender -- 谢谢,已编辑...
  • 只是指出这一点。您实际上不需要编辑原始问题。

标签: python dataframe pandas


【解决方案1】:

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

而且,对于这个简单的案例,为什么不直接使用 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

【讨论】:

    【解决方案2】:

    如果我没听错的话,您正在寻找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
    

    【讨论】:

    • @ BrenBarn -- 是的,这正是我想要的。没有从文档中注意到它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2020-07-02
    • 2020-05-11
    • 1970-01-01
    • 2015-01-25
    • 2021-04-15
    • 2016-05-15
    相关资源
    最近更新 更多