【问题标题】:Pandas is condition on multiple columns熊猫是多列的条件
【发布时间】:2019-08-14 18:39:35
【问题描述】:

我有一个数据框

col1    col2    col3    col4
A         F      F      F
B         F      A      B
C         B      A      C
D         S      A      F

我想说如果这些列中的任何一个中的 A 和 F 然后创建一个新列并输入“找到”

col1    col2    col3    col4   output
A         F      F      F        Found
B         F      A      B        Found
C         B      A      C           0
D         S      A      F        Found

【问题讨论】:

  • 使用布尔值。类似df.eq('A').any(1) & df.eq('F').any(1)
  • 使用df['output']=np.where(df.eq('A').any(1) & df.eq('F').any(1),'Found',0)
  • @jpp 很长时间了。 :)

标签: pandas if-statement contains


【解决方案1】:

使用:

df['output']=np.where(df.eq('A').any(1) & df.eq('F').any(1),'Found',0)

另一种方法:

df['output']=(df.eq('A').any(1) & df.eq('F').any(1)).map({True:'Found',False:0})

输出:

  col1 col2 col3 col4 output
0    A    F    F    F  Found
1    B    F    A    B  Found
2    C    B    A    C      0
3    D    S    A    F  Found

【讨论】:

    【解决方案2】:

    试试这个:

    df.loc[df.apply(lambda x: ((x=='F').any() & (x=='A').any()).any(),axis=1), 'output'] = 'Found'

    df.fillna(0)

    【讨论】:

    • 我认为你需要使用 '&' 而不是 '|'在这里获取输出。
    • 是的,你是对的 Loochie,谢谢你指出来.. :-)
    【解决方案3】:

    你可以使用 pd.DataFrame.where():

    df.where(lambda x: (x=='A') | (x=='F')).dropna(thresh=1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-20
      • 2022-12-11
      相关资源
      最近更新 更多