为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

收到一只叮咚 2023-10-31 21:46:58
以以下数据框为例:df = pd.DataFrame({'Sample':['X', 'Y', 'Z'], 'Base':[2, 10, 3], 'A':[0,5,100], 'C':[0,10,7]})我想添加一个名为df["indices"]列索引的新列df["A"]和/或df["C"]只要它们满足两个条件:必须大于 5df["A"]/df["Base"]或者df["C"]/df["Base"]必须大于或等于 1生成的数据框将是: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 值,df[['A','C']] > 5但我无法让它与我的条件 2 一起使用,该条件基于我的数据框中的另一列。在新专栏中获取 True 的索引又是另一回事了。我想象有 apply 和 get_loc 或 index 的东西,但无论我如何尝试,我都无法让它工作。
查看完整描述

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


查看完整回答
反对 回复 2023-10-31
?
慕丝7291255

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


查看完整回答
反对 回复 2023-10-31
  • 2 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信