gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:40 25 4
gpt4 key购买 nike

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

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

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

最佳答案

如果性能很重要,请不要使用 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 中的值为真的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52553605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com