【问题标题】:simple apply to concat pandas-columns简单地应用于 concat pandas-columns
【发布时间】:2018-01-04 15:43:34
【问题描述】:

我怎样才能使这个程序工作?结果应该是连接的整数:

import pandas as pd
d = pd.DataFrame({'A': range(5), 'B': range(5, 10)})
f = lambda x, y: str(x) + str(y)
d[['A', 'B']].apply(f, axis = 1)

谢谢和亲切的问候

【问题讨论】:

    标签: python-3.x pandas apply


    【解决方案1】:

    在与DataFrameaxis=1 一起应用时,每个循环都会生成Series

    f = lambda x: str(x.A) + str(x.B)
    a = d[['A', 'B']].apply(f, axis = 1)
    

    非常相似,可以先将两列都转换为strings:

    f = lambda x: x.A + x.B
    a = d[['A', 'B']].astype(str).apply(f, axis = 1)
    

    您可以通过自定义函数检查处理:

    def f(x):
        print (x)
        print (x.A)
        print (x.B)
        return str(x.A) + str(x.B)
    
    a = d[['A', 'B']].apply(f, axis = 1)
    
    A    0
    B    5
    Name: 0, dtype: int64
    0
    5
    A    1
    B    6
    Name: 1, dtype: int64
    1
    6
    A    2
    B    7
    Name: 2, dtype: int64
    2
    7
    A    3
    B    8
    Name: 3, dtype: int64
    3
    8
    A    4
    B    9
    Name: 4, dtype: int64
    4
    9
    

    但更好/更快的是加入+,但首先将数字列转换为strings:

    a = d['A'].astype(str) + d['B'].astype(str)
    

    print (a)
    0    05
    1    16
    2    27
    3    38
    4    49
    dtype: object
    

    【讨论】:

    • 我不明白的是,我将什么从 d[['A', 'B']] 交给 lambda 函数“f”? Columns = Pandas-Series / Lists 还是 d.A 和 d.B 的单个元素?
    • 不确定是否理解,因此添加了自定义功能以便更好地解释。
    • 非常感谢,使用您的海关功能让我也清楚了。
    【解决方案2】:

    为什么不使用更简单的东西,比如:

    d['A'].apply(str) + d['B'].apply(str)
    

    【讨论】:

      猜你喜欢
      • 2020-01-17
      • 2015-01-21
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 2013-06-03
      • 2018-05-30
      相关资源
      最近更新 更多