熊猫:如何基于同一列中的两个条件选择行

狮子座

我有下表,我试图选择在数据框中的某些点在“ C”列中显示为“ D”和“ E”的“ col1”和“ col2”对。

col1    col2    C   val
aaa rte_1   D   58
aaa rte_2   E   47
bbb rte_3   D   2
aaa rte_4   E   35
aaa rte_5   E   95
ttt rte_6   E   84
aaa rte_1   D   57
ddd rte_2   C   36
aaa rte_3   C   13
aaa rte_4   C   28
aaa rte_5   E   3

换句话说,结果应该是

col1    col2    C   val
aaa rte_1   D   58
aaa rte_5   E   95
aaa rte_1   D   57
aaa rte_5   E   3

我已经尝试过类似的方法,但是我得到了一个空的数据框,因此显然是错误的。

d = {'col1' : ['aaa', 'aaa', 'bbb', 'aaa', 'aaa', 'ttt', 'aaa', 'ddd', 'aaa', 'aaa', 'aaa'], 'col2' : ['rte_1', 'rte_2', 'rte_3', 'rte_4', 'rte_5', 'rte_6, 'rte_1', 'rte_2', 'rte_3', 'rte_4', 'rte_5'], 'C' : ['D', 'E', 'D', 'E', 'E', 'E', 'D', 'C', 'C', 'C', 'E'], 'val' : ['58', '47', '2', '35', '95', '84', '57', '36', '13', '28', '3']}
df = pd.DataFrame(d)    
df2=df.loc[(df.C =='D')&(df.C =='E')]['A', 'B']

我怎样才能做到这一点?

编辑:当我说我想选择同时具有“ E”和“ D”的值时,我的意思是我想选择具有相同“ col1”和“ col2”对并具有“ D”的行,并且然后,在数据帧中的某个点,它们再次出现并带有“ E”(反之亦然,首先是“ E”,然后是“ D”)。我希望这可以澄清这个问题。

戴维·埃里克森

听起来您可能想尝试做的是查看组中的所有值是否仅为“ B”或“ E”。同时,您的预期输出还排除了满足该条件但只有一个成员的行。您可以GROUPBY你所提到的“配对”列和使用列表解析,检查是否所有的值要么DEall([True... )我还添加了另一条逻辑and len(x) > 1,因为您的输出排除了只有一行的组。这将创建的布尔系列s如果满足条件),可用于直接在数据帧上进行过滤,并获取“预期输出”。TrueFalse

s = df.merge(df.groupby(['col1', 'col2'])['C'].apply(lambda x: all([True if y in ['D', 'E'] 
                                                                    and len(x) > 1 
                                                                    else False for y in x ]))
             .reset_index(),
             how='left', on=['col1', 'col2']).iloc[:,-1]
df[s]
Out[1]: 
   col1   col2  C  val
0   aaa  rte_1  D   58
4   aaa  rte_5  E   95
6   aaa  rte_1  D   57
10  aaa  rte_5  E    3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MYSQL选择基于匹配同一列的两个条件

如何在两个条件下为同一列选择使用联接

如何基于单独的日期列划分同一列中的两个值

如何基于R中的同一列合并/匹配两个文件

如何基于组变更找到同一列中两个日期之间的间隔

选择在同一列中具有两个不同值的行

如何从表中的同一列“计数”两个不同的条件?

如何在同一列上基于两个不同条件编写按查询分组返回结果?

序言中同一列表上的两个基于条件的替换函数?

如何从同一张表中查询同一列但条件不同的两个不同的总和?

如何从共享两个公共列的一组行中选择一列中具有最大值的熊猫行?

在mysql的两个表中基于同一列对两个列值进行计数

如何创建包含在数据帧大熊猫基于同一类别列的两个不同的值的操作的另一列?

熊猫-合并/连接同一列中的两个值

选择同一列中两个日期之间的最大差异

如何获得两个条件语句以将信息提取到同一列?

使用两个WHERE条件从同一张表中两次选择一列SQL SERVER

如何基于熊猫中的多种条件选择每行一列

SQL:基于一列中的两个条件进行计数

如何在PowerBI中减去同一列(如A2-A1)中的两个时差行

如果同一行中另一列中的值匹配,如何比较一列的两个值

同一列中的两个值

比较同一列中的两个值

如何从两个独立行的同一列计算商?

如何计算同一列中的两个不同的列值?

如何将两个表中的值包含在同一列中

如何从 R 中同一列的两个观察中获得差异

如果值不在同一列的其他两个值之间,则删除熊猫行

如何联接两个表,以使两个表中的同一列不重复?