【问题标题】:Applying function to Pandas dataframe by column按列将函数应用于 Pandas 数据帧
【发布时间】:2016-06-24 20:49:04
【问题描述】:

我有一个函数,我想将其应用于 pandas 数据框的某些列。 因此,我不想明确说明列,而是想动态选择我想要的列,然后调用函数,例如

如何实现类似的东西:

for column in dataframe:
    if column.name != 'manager':
       apply function():

【问题讨论】:

    标签: python function pandas dataframe multiple-columns


    【解决方案1】:

    我想你可以先找到list comprehension的所有列,然后applyfunc

    import pandas as pd
    
    df = pd.DataFrame({'A':[1,2,3],
                       'B':[4,5,6],
                       'C':[7,8,9],
                       'D':[1,3,5],
                       'E':[5,3,6],
                       'F':[7,4,3]})
    
    print (df)
       A  B  C  D  E  F
    0  1  4  7  1  5  7
    1  2  5  8  3  3  4
    2  3  6  9  5  6  3
    
    cols = [col for col in  df.columns if col != 'B']
    print (cols)
    ['A', 'C', 'D', 'E', 'F']
    
    def func(x):
        return x + 1
    
    df[cols] = df[cols].apply(func)
    
    print (df)
       A  B   C  D  E  F
    0  2  4   8  2  6  8
    1  3  5   9  4  4  5
    2  4  6  10  6  7  4
    

    布尔索引的另一种解决方案:

    cols = df.columns[df.columns != 'B']
    print (cols)
    Index(['A', 'C', 'D', 'E', 'F'], dtype='object')
    

    【讨论】:

      【解决方案2】:

      使用drop()apply()

      df.drop('manager', axis=1).apply(func)
      

      演示:

      In [115]: df
      Out[115]:
         a  b  c
      0  4  5  3
      1  6  6  6
      2  3  4  1
      3  2  1  6
      4  8  8  1
      
      In [116]: df.drop('b', axis=1)
      Out[116]:
         a  c
      0  4  3
      1  6  6
      2  3  1
      3  2  6
      4  8  1
      
      In [117]: def func(i):
         .....:     return i ** 2
         .....:
      
      In [118]: df.drop('b', axis=1).apply(func)
      Out[118]:
          a   c
      0  16   9
      1  36  36
      2   9   1
      3   4  36
      4  64   1
      

      【讨论】:

        猜你喜欢
        • 2020-05-28
        • 1970-01-01
        • 2021-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多