DataFrame运行计数和串联

Bartek Nowakowski

我有一个具有2列的DataFrame:

    part    content
0   'ok'    'A'
1   'ok'    'B'
2   ''      'C'
3   ''      'D'
4   ''      'E'
5   ''      'F'
6   'ok'    'G'
7   'ok'    'H'
8   ''      'I'
9   'ok'    'J'
10  ''      'K'
11  'ok'    'L'
12  ''      'M'
13  'ok'    'N'
14  ''      'O'
15  ''      'P'

我需要创建新列:

  1. count -一组物品的柜台
    • if part == 'ok' 然后是一组的第一要素
    • if part == '' 那么它是上面一组的一部分
  2. concat -一组内的项目串联
  3. take -组中的最后一行,其中所有项

它应如下所示:

        part    content  count  concat    take
    0   'ok'    'A'      1      'A'       True
    1   'ok'    'B'      1      'B'       False
    2   ''      'C'      2      'BC'      False
    3   ''      'D'      3      'BCD'     False
    4   ''      'E'      4      'BCDE'    False
    5   ''      'F'      5      'BCDEF'   True
    6   'ok'    'G'      1      'G'       True
    7   'ok'    'H'      1      'H'       False
    8   ''      'I'      2      'HI'      True
    9   'ok'    'J'      1      'J'       False
    10  ''      'K'      2      'JK'      True
    11  'ok'    'L'      1      'L'       False
    12  ''      'M'      2      'LM'      True
    13  'ok'    'N'      1      'N'       False
    14  ''      'O'      2      'NO'      False
    15  ''      'P'      3      'NOP'     True

然后,我将其过滤为仅包括完整的行。

    concat
0   'A'
1   'BCDEF'
2   'G'
3   'HI'
4   'JK'
5   'LM'
6   'NOP'

我需要第一部分的帮助-如何为组中的最后一行创建具有运行计数,串联和True / False的列。

另外-上面示例中的数据是匿名的:

  • 专栏part有11个不同的元素来对内容的哪一部分进行分类。不只是ok''
  • 列中content有我要分析的文档的一行。这是一个0-400个字符的字符串。
贝尼

嗯,这个问题包括三个子问题q1是使用cumsum创建组键cumcount,q2是cumsum,q3是获取每个子组位置的最大值,所以我们transform max

df['count']=df.groupby(df.part.eq('ok').cumsum()).cumcount()+1
df['concat']=df.groupby(df.part.eq('ok').cumsum()).content.apply(lambda x : x.cumsum())
df['take']=df['count']==df.groupby(df.part.eq('ok').cumsum())['count'].transform('max')
df

   part content  count concat   take
0    ok       A      1      A   True
1    ok       B      1      B  False
2             C      2     BC  False
3             D      3    BCD  False
4             E      4   BCDE  False
5             F      5  BCDEF   True
6    ok       G      1      G   True
7    ok       H      1      H  False
8             I      2     HI   True
9    ok       J      1      J  False
10            K      2     JK   True
11   ok       L      1      L  False
12            M      2     LM   True
13   ok       N      1      N  False
14            O      2     NO  False
15            P      3    NOP   True

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章