我有一个df
A
看起来像
type number date
1 1 2017-10-01
2 1 2017-10-31
1 2 2017-09-01
1 2 2017-08-01
2 2 2017-06-01
首先我想按number
分组,并选择每个组至少需要包含一行type == 1
和一行type == 2
的组;为此,我首先检查每个组的大小必须为>;2号
g = A.groupby('number')
B = g.filter(lambda x: len(x) > 1) # df B gets the filter results on g
但我不知道如何也检查type
值1
和2
包含在上面获得的每个组中
其次,基于从步骤1获得的组,我想在A
中创建一个名为type_2_before_type_1
的布尔列,如果最早的date
for type 1
减去最早的date
for type 2
是<0
表示每组,否则False
。因为在每个组中可能有许多带有type == 1
的行和许多带有type == 2
的行(如何获得类型1和类型2行的g['A'].transform('min')
?)。所以结果df
A
看起来像
type number date type_2_before_type_1
1 1 2017-10-01 True
2 1 2017-10-31 True
1 2 2017-09-01 False
1 2 2017-08-01 False
2 2 2017-06-01 False
例如,对于具有number == 2
的组,类型1 2017-08-01
的最早日期减去类型2 2017-06-01
的最早日期,结果为61天;因此,将False
设置为type_2_before_type_1
对于第一部分,使用
groupby
+nunique
-第二部分有点挑战性,但是你可以
groupby
,unstack
,调用diff
,然后得到一个掩码-相关问题 更多 >
编程相关推荐