【发布时间】:2018-02-26 16:28:36
【问题描述】:
您好,我有一个 pandas 数据框,其中包含事件列和其他列。我想在 id 上执行 group by 在那个 group by 我想从所有连续 0 中取出 2 条记录 我想找出连续 5 0 的模式可能更多,但它必须始终跟在 1 之后然后识别记录集,即继续 5 个 0,然后是下一个 1,然后获取中间行(这 5 个 0 中的 0)记录,并找出那些 0 之后的第一个 1 并取该行。但是对于 0s aleast,我应该重复 5 次或更多,然后从最后 5 次中取出中间行。
简而言之: 我想要 0 和 1 的集合,条件是只取 1,上面你发现连续 5 个 0 或更多,如果这种模式是多次的,那么采用一个模式为每个具有 0 和 1 的 id 获取两条记录
例如。
import pandas as pd
data={'id':[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],
'name': ['a','b','c','d','e','f','g','h','i','j','k','l','m','n'
,'o','p','q','r','s','t','a1','b1','c1','d1','e1','f1','g1','h1','i1','j1','k1','l1','m1','n1'
,'o1','p1','q1','r1','s1','t1','aa','bb','cc','dd','ee','ff',
'gg','hh','ii','jj','kk','ll','mm','nn'
,'oo','pp','qq','rr','ss','tt','aa1','bb1','cc1','dd1','ee1','ff1',
'gg1','hh1','ii1','jj1','kk1','ll1','mm1','nn1'
,'oo1','pp1','qq1','rr1','ss1','tt1'],
'value':[0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0]}
df=pd.DataFrame.from_dict(data)
作为输出,我想为每个 id 获取 2 条记录,一条用于 0,一条用于 1。并且0行应该是5个或更多连续0的中间记录。
预期的输出是:
id name value
16 1 q 0
19 1 t 1
64 2 ee1 0
67 2 hh1 1
【问题讨论】:
-
如果您的问题解决了,请用绿色勾号标记正确答案,以便关闭线程。