DataFrame подсчет и объединение - PullRequest
1 голос
/ 16 октября 2019

У меня есть DataFrame, который имеет 2 столбца:

    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 символов.

1 Ответ

3 голосов
/ 16 октября 2019

Ммм, этот вопрос включает в себя три подвопроса. 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...