2 回答
TA贡献1798条经验 获得超7个赞
让我们创建一个满足两个给定条件的布尔掩码,然后使用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
TA贡献1859条经验 获得超6个赞
当满足任意数量的条件时,您可以将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
添加回答
举报