使用groupby查看一个值是否出现在不调用列表中的另一个值之前



如果有人能帮我,我真的很感激:

我有这个数据帧,它包含电话号码("called_to"(,以及该号码是否位于呼叫或不呼叫列表列:("dispo"(。每一行都是一个单独的调用,ok to调用用"c"指定,do not调用用"d"指定。

这些调用是按时间顺序进行的,因此索引可以作为一种日期时间指示器。

我想做的是只打印一个号码放在禁止呼叫列表上,然后有一个可以呼叫的指定的号码。所有这些号码都有多个呼叫,但总共可以有2到n个呼叫。

我不明白的是如何使用groupby,然后对符合标准的数字进行排序。我在想,也许我可以试着看看这个组是否按字母顺序失败(c,c,d,c会失败,而c,c、d会通过(。再次,不确定如何在groupby中做到这一点,我正在尝试看看我是否可以使用.apply.

创建示例数据帧

edf = pd.DataFrame.from_dict({'called_to' : ['11' , '22' , '33', '44', '11' , '22' , '33', '44','11' , '22' , '33', '44','11' , '22' , '33', '44'], 'dispo': ['c' , 'c', 'd', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'd', 'c', 'd', 'c', 'c']})
edf
called_to   dispo
0   11  c
1   22  c
2   33  d
3   44  c
4   11  c
5   22  c
6   33  c
7   44  c
8   11  c
9   22  c
10  33  c
11  44  d
12  11  c
13  22  d
14  33  c
15  44  c

我可以使用groupby显示信息,它看起来像这样:

by_number = edf.groupby('called_to')
for key, item in by_number:
print(by_number.get_group(key), "nn")
called_to dispo
0         11     c
4         11     c
8         11     c
12        11     c 

called_to dispo
1         22     c
5         22     c
9         22     c
13        22     d 

called_to dispo
2         33     d
6         33     c
10        33     c
14        33     c 

called_to dispo
3         44     c
7         44     c
11        44     d
15        44     c 

所需输出为:

called_to dispo
2         33     d
6         33     c
10        33     c
14        33     c 


called_to dispo
3         44     c
7         44     c
11        44     d
15        44     c

您可以使用过滤组

# is the call OK?
m1 = edf['dispo'].eq('c')
# was a previous call not OK?
m2 = edf.groupby('called_to')['dispo'].shift(-1).eq('d')
edf[(m1&m2).groupby(edf['called_to']). transform('any')]
循环中使用的

变体

by_number = edf.groupby('called_to')
m1 = edf['dispo'].eq('c')
m2 = by_number['dispo'].shift().eq('d')
m = m1&m2
keep = set(edf.loc[m, 'called_to'])
for key, item in by_number:
if key in keep:
print(by_number.get_group(key), "nn")

输出:

called_to dispo
2         33     d
6         33     c
10        33     c
14        33     c 

called_to dispo
3         44     c
7         44     c
11        44     d
15        44     c 

最新更新