【问题标题】:Pandas apply function to groups of columns and indexingPandas 将函数应用于列组和索引
【发布时间】:2016-12-22 22:34:48
【问题描述】:

给定一个由多列组成的数据框df

Col1   Col2   Col3   Col4   Col5   Col6
   4      2      5      3      4      1
   8      3      9      7      4      5
   1      3      6      7      4      7

我想为一组列应用函数func

df.apply(lambda x: func(x[['Col1', 'Col2', 'Col3']]), axis=1)

这可以正常工作。但是,使用

df.apply(lambda x: func(x.iloc[:,0:3]), axis=1)  

我收到以下错误:

IndexingError: ('Too many indexers', u'occurred at index 0')

由于我想使用以三列为一组的循环来自动化函数,我更喜欢使用 pandas ilocix 作为索引方法。

有人能解释一下这个错误吗?

【问题讨论】:

    标签: python pandas indexing dataframe multiple-columns


    【解决方案1】:

    您需要先删除iloc 中的:,因为使用apply 中的Series,而不是DataFrame

    print (df.apply(lambda x: func(x.iloc[0:3]), axis=1))
    

    测试:

    def func(x):
        return x.sum()
    
    print (df.apply(lambda x: func(x[['Col1', 'Col2', 'Col3']]), axis=1))
    0    11
    1    20
    2    10
    dtype: int64
    
    print (df.apply(lambda x: func(x.iloc[0:3]), axis=1))
    0    11
    1    20
    2    10
    dtype: int64
    

    您也可以通过print 进行检查(打印不返回任何内容,因此输出为None):

    print (df.apply(lambda x: print(x.iloc[0:3]), axis=1))
    dtype: int64
    Col1    4
    Col2    2
    Col3    5
    Name: 0, dtype: int64
    Col1    8
    Col2    3
    Col3    9
    Name: 1, dtype: int64
    Col1    1
    Col2    3
    Col3    6
    Name: 2, dtype: int64
    0    None
    1    None
    2    None
    

    【讨论】:

    • 非常感谢@jezrael。很抱歉提出这样的问题。本来可以早点想到的!
    • 没问题,抱歉没必要。
    猜你喜欢
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多