使用pandas获取新列中满足多个条件的列的索引

时间:2020-10-11 15:44:04

标签: python pandas dataframe

以以下数据框为例:

df = pd.DataFrame({'Sample':['X', 'Y', 'Z'], 'Base':[2, 10, 3], 'A':[0,5,100], 'C':[0,10,7]})

如果要满足两个条件,我想添加一个名为df["indices"]和/或df["A"]的列的新列:

  1. 必须大于5
  2. df["C"]df["A"]/df["Base"]必须大于或等于1

结果数据框将是:

df["C"]/df["Base"]

我可以使用df = pd.DataFrame({'Sample':['X', 'Y', 'Z'], 'Base':[2, 20, 3], 'A':[0,6,100], 'C':[0,10,7], 'indices': ['','C','A,C']}) 获得第一个条件的True或False值,但是我无法使其与基于数据帧中另一列的条件2一起使用。在新的专栏中获取我在其中获得True的索引又是另一回事了。我想像有apply和get_loc或index的东西,但是无论如何尝试,我都无法使其正常工作。

2 个答案:

答案 0 :(得分:0)

在满足任意多个条件时,您可以使用df.loc将值分配回该列。一种简单的方法是让其中的3个具有您所需的条件。如果您愿意,也可以将np.where链接在一起以达到相同的目的。

import pandas as pd

df = pd.DataFrame({'Sample':['X', 'Y', 'Z'], 
                   'Base':[2, 10, 3], 
                   'A':[0,5,100], 
                   'C':[0,10,7]})

df.loc[(df['A'] / df['Base'] >=1) & (df['C'] / df['Base'] >=1), 'indicies'] = 'A,C'
df.loc[(df['A'] / df['Base'] >=1) & (df['C'] / df['Base'] <1), 'indicies'] = 'A'
df.loc[(df['A'] / df['Base'] <1) & (df['C'] / df['Base'] >=1), 'indicies'] = 'C'

输出

   Sample   Base      A     C   indicies
0       X      2      0     0       NaN
1       Y     10      5    10         C
2       Z      3    100     7       A,C

答案 1 :(得分:0)

让我们创建一个满足两个给定条件的布尔掩码,然后在此掩码上使用DataFrame.dot来获取索引:

m = df[['A', 'C']].gt(5) & df[['A', 'C']].div(df['Base'], axis=0).ge(1)
df['indices'] = m.dot(m.columns + ',').str.rstrip(',')

  Sample  Base    A   C indices
0      X     2    0   0        
1      Y    10    5  10       C
2      Z     3  100   7     A,C
相关问题