【问题标题】:How to make an "and" operation in Pandas DataFrame with items in a list [duplicate]如何在 Pandas DataFrame 中对列表中的项目进行“与”操作[重复]
【发布时间】:2018-11-14 11:53:33
【问题描述】:

例如,我有列名、相等关系和条件的列表

column = ['height', 'age', 'gender']
equal = ['>', '>', '==']
condition = [1.68, 20, 'F']

而我想在pandas DataFrame中选择特定条件的数据,

df = df[(df['height']>1.68) & df['age']>20 & df['gender']=='F']

是否可以使用上面的三个列表(列、相等和条件)来实现选择?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我认为构建条件需要query,但对于values 中的字符串值添加"" 是必要的if-else 条件:

    df = pd.DataFrame({'gender':list('MMMFFF'),
                       'height':[4,5,4,5,5,4],
                       'age':[70,80,90,40,2,3]})
    
    print (df)
      gender  height  age
    0      M       4   70
    1      M       5   80
    2      M       4   90
    3      F       5   40
    4      F       5    2
    5      F       4    3
    
    q = ' & '.join(['{}{}"{}"'.format(i,j,k) if isinstance(k, str) 
                   else '{}{}{}'.format(i,j,k) for i, j, k in zip(column, equal, condition)])
    print (q)
    height>1.68 & age>20 & gender=="F"
    

    感谢@Yakym Pirozhenko 提供更简单的解决方案:

    q = ' & '.join(['{}{}{}'.format(i,j,repr(k)) for i, j, k in zip(column, equal, condition)])
    print (q)
    height>1.68 & age>20 & gender=='F' 
    

    df = df.query(q)
    print (df)
      gender  height  age
    3      F       5   40
    

    【讨论】:

    • @YakymPirozhenko - 谢谢,实际上if-else 似乎应该省略。
    • @coldspeed - 谢谢。
    • 如果字符串列中有NaNs,if-else 可能仍然很方便。
    • @user2583253 - 不客气!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多