【问题标题】:How to use pandas apply function on all columns of some rows of data frame如何在数据框的某些行的所有列上使用熊猫应用功能
【发布时间】:2016-07-21 09:12:45
【问题描述】:

我有一个dataframe。我想将某些行的所有列的值替换为默认值。有没有办法通过pandas apply 函数来做到这一点

这是数据框

import pandas as pd
temp=pd.DataFrame({'a':[1,2,3,4,5,6],'b':[2,3,4,5,6,7],'c':['p','q','r','s','t','u']})
mylist=['p','t']

如何将ab列中的值替换为默认值0,其中c列的值在mylist

有没有办法使用 pandas 功能来做到这一点,避免 for 循环

【问题讨论】:

    标签: python pandas data-manipulation


    【解决方案1】:

    使用isin 创建一个布尔掩码并使用loc 将满足条件的行设置为所需的新值:

    In [37]:
    temp.loc[temp['c'].isin(mylist),['a','b']] = 0
    temp
    
    Out[37]:
       a  b  c
    0  0  0  p
    1  2  3  q
    2  3  4  r
    3  4  5  s
    4  0  0  t
    5  6  7  u
    

    内部isin的结果:

    In [38]:
    temp['c'].isin(mylist)
    
    Out[38]:
    0     True
    1    False
    2    False
    3    False
    4     True
    5    False
    Name: c, dtype: bool
    

    【讨论】:

    • 谢谢@EdChum。但这对大约 500 列和 100 万行有效吗
    • 应该可以,本质上你使用布尔掩码来选择感兴趣的行,你传递一个你想要替换值的列列表,这将比使用 @987654327 快得多@
    【解决方案2】:

    基于 NumPy 的方法是使用 np.in1d 来获取这样的掩码并像这样使用它 -

    mask = np.in1d(temp.c,mylist)
    temp.ix[mask,temp.columns!='c'] = 0
    

    这将替换除'c' 之外的所有列。如果您希望在特定列中替换,例如 'a''b',请将最后一行编辑为 -

    temp.ix[mask,['a','b']] = 0
    

    【讨论】:

    • 这很聪明,但如果 OP 有很多列要替换 +1,则可能无法扩展
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    相关资源
    最近更新 更多