A B C
0 2002-01-12 Sarah 39
1 2002-01-12 John 17
2 2002-01-12 Susan 30
3 2002-01-15 Danny 12
4 2002-01-15 Peter 25
5 2002-01-15 John 25
6 2002-01-20 John 16
7 2002-01-20 Hung 10
8 2002-02-20 John 20
9 2002-02-20 Susan 40
10 2002-02-24 Rebel 40
11 2002-02-24 Susan 15
12 2002-02-24 Mark 38
13 2002-02-24 Susan 30
我想选择包含John
和Susan
的完整A
组。你知道吗
输出应为:
A B C
0 2002-01-12 Sarah 39
1 2002-01-12 John 17
2 2002-01-12 Susan 30
6 2002-01-20 John 16
7 2002-01-20 Hung 10
8 2002-02-20 John 20
9 2002-02-20 Susan 40
我试过:
df.groupby('A').apply(lambda x: ((df.B == x.John) & (df.B == x.Susan)))
创建一个日期数组,作为包含
John
的日期与包含Susan
的日期的交集:然后使用日期数组过滤数据帧
计时:
比较上述jpp、ALollz和我的解决方案:
基于numpy的解决方案的效率是其他解决方案的数倍。你知道吗
但是,通过省略一些额外的不需要的操作,并转到numpy数组进行比较,ALollz提出的解决方案可以提高2倍的速度。你知道吗
可以使用
groupby
+transform
为满足该条件的组创建标志。然后你可以用这个标志来屏蔽原始的df
。如果不想修改原始df
,可以创建一个名为flag
的独立Series
,否则也可以将其分配给原始df
中的一列然后可以过滤
df
创建一个序列,将每个日期映射到} :
set
个名称。然后通过语法sugar>=
使用^{相关问题 更多 >
编程相关推荐