python - DataFrame 运行计数和连接

标签 python python-3.x pandas dataframe

我有一个包含 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 的列。

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

  • column part 有 11 个不同的元素来分类它是内容的哪一部分。不只是 ok''
  • content 有一行我正在分析的文档。它是一个 0-400 个字符的字符串。

最佳答案

嗯,这个问题包括三个子问题 q1 是使用 cumsum 创建组 key 然后 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

关于python - DataFrame 运行计数和连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58412758/

相关文章:

python - 总结 DataFrame 中的行,同时保持类似的 DataFrame 结构

python - 如何让 flask 应用程序每 5 分钟运行一次?

python - 对数据框多索引级别和按列进行排序

python - Pandas df.columns.values.tostring()

python - 使用 python requests 和 BeatifulSoup 在维基百科页面上抓取多个表及其标题?

python - 计算总和的结果连续多少次为正(或负)

python - 连接具有不同日期时间频率的数据帧

python - 如何使用Python添加Excel文件的链接

python - Python 中的 getter 和 setter

python - 生成器和协程的异步装饰器