python - 选择 x 列给出的条件对于 y 列中的值为 true 的行

标签 python pandas

我有一个 Pandas 数据框,如下所示:

Column_X    Column_Y    A-Indicator
   Val1        A           True
   Val1        B           True
   Val2        B           False
   Val2        B           False

我想创建“A-Indicator”列。如果单个 Val1 行具有 Column_Y = A,则该列对于 Column_X = 'Val1' 的所有行均为 True。由于没有 Column_X = 'Val2' 的行具有 Column_Y = 'A',因此 A 指示符对于所有这些行均为 false 。有没有简单的方法可以实现这一目标?

最佳答案

如果性能很重要,请不要使用groupby:

df['A-Indicator'] = df['Column_X'].isin(df.loc[df['Column_Y'].eq('A'), 'Column_X'].unique())
print (df)
  Column_X Column_Y  A-Indicator
0     Val1        A         True
1     Val1        B         True
2     Val2        B        False
3     Val2        B        False

说明:

首先比较eq (==):

print (df['Column_Y'].eq('A'))
0     True
1    False
2    False
3    False
Name: Column_Y, dtype: bool

查找列Column_X的所有值:

print (df.loc[df['Column_Y'].eq('A'), 'Column_X'])
0    Val1
Name: Column_X, dtype: object

获取独特的值以获得更好的性能:

print (df.loc[df['Column_Y'].eq('A'), 'Column_X'].unique())
['Val1']

最后比较 isin :

print (df['Column_X'].isin(df.loc[df['Column_Y'].eq('A'), 'Column_X'].unique()))
0     True
1     True
2    False
3    False
Name: Column_X, dtype: bool    

性能:取决于行数和匹配值的数量:

np.random.seed(123)

N = 1000000
L = list('ABCDEFGHIJK')
df = pd.DataFrame({
                      'Column_X':np.random.randint(1000, size=N),
                      'Column_Y': np.random.choice(L, N),
                  })
print (df)

In [193]: %timeit df['A-Indicator'] = df['Column_X'].isin(df.loc[df['Column_Y'].eq('A'), 'Column_X'].unique())
92.1 ms ± 396 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [194]: %timeit df['A-Indicator']=df.groupby('Column_X')['Column_Y'].transform(lambda x: x.isin(['A']).any())
724 ms ± 3.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [195]: %timeit df['A-Indicator']=df.groupby('Column_X')['Column_Y'].transform(lambda x: 'A' in x.unique())
770 ms ± 48.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

关于python - 选择 x 列给出的条件对于 y 列中的值为 true 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52553605/

相关文章:

python - Pandas - DateTime groupby 到结构化字典

通过 pandas 表进行分组的 Pythonic 方式

python - 在 R 单元、rpy2、Jupyter Notebook 中使用 pandas 数据帧时出错

python - 为数据框中的每个非零值绘制一条垂直线

python - 当值与另一列匹配时回填 Pandas 系列中的值

python - 在 Pandas 中旋转每个组

python - 用垂直线绘制 pandas 数据框

python - 基本的 python 缩进/缩进问题

python - scipy.optimize 约束最小化 SLSQP - 无法 100% 匹配目标

python - numpy bincount 可以处理二维数组吗?