【问题标题】:how to perform row by row operation in pandas [duplicate]如何在熊猫中执行逐行操作[重复]
【发布时间】:2018-06-21 05:45:24
【问题描述】:

我有一个包含两列的数据框,last_namedescription

查看description 每行是否包含last_name 的优雅方法是什么?

我长得丑


for i in range(0,len(df0)):
    df0['last_name_position'].loc[i] = \ 
        df0['description'].loc[i].find(df0['last_name'].loc[i])

正在运行。

这基本上是相同的任务 https://exceljet.net/formula/cell-contains-specific-text

【问题讨论】:

    标签: python string pandas dataframe


    【解决方案1】:

    使用df.apply可以达到同样的效果:

    df0['last_name_position'] = \ 
        df0.apply(lambda x: x.description.find(x.last_name), axis=1)
    

    如果您不需要查找子字符串的索引:

    df0['last_name_position'] = \ 
        df0.apply(lambda x: x.last_name in x.description, axis=1)
    

    【讨论】:

    • 感谢您的快速回复!
    【解决方案2】:

    使用索引循环遍历行可能会更好。然后使用in 关键字进行比较:

    import pandas as pd 
    
    a = pd.DataFrame([['Smith','Some description'],['Jones','Some Jones description']], columns=['last_name','description'])
    
    for rname in a.index:
        row = a.loc[rname]
    
        it_contains = row['last_name'] in row['description']
        print "Description contains last name:", it_contains
    
    # Outputs:
    # Description contains last name: False
    # Description contains last name: True
    

    【讨论】:

    • 我会说这是反熊猫。对于简单的比较,不需要遍历 Pandas 索引。有一些方法,pd.DataFrame.applypd.Series.apply,这使得它变得多余。
    • 你会怎么做呢?我猜使用 pandas DataFrame.apply() 函数?大约一个月前我拿起了它,所以我欢迎更多关于 Panda-nic 的建议
    • 没错。或者,仅在这种特定情况下,列表推导式也更加 Pandorable。
    • @jpp 提供了一个非常优雅的解决方案 df0['last_name_in_description'] = [i in j for i, j in zip(df0['last_name'], df0['description'])] 谢谢. (您的用户名恰好与我最好朋友的姓名首字母一致。)
    • @Marshall,没问题,我删除了我的答案,因为它也出现在标记的副本中。
    【解决方案3】:

    保存数据框:

    import pandas as pd 
    
    a = pd.DataFrame([['Smith','Some description'],['Jones','Some Jones description']], columns=['last_name','description'])
    a['Match']=a.apply(lambda x: x['last_name'] in x['description'], axis=1)
    a.head()
    
    last_name   description             Match
    0   Smith   Some description        False
    1   Jones   Some Jones description  True
    

    【讨论】:

    • 感谢您的快速回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2022-12-05
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多