小能豆

如何根据在一定条件下重置的累计总和进行分组

py

我有一个 pandas df,里面有与文章相对应的字数。我希望能够添加另一列MERGED,该列基于具有最小累计和“min_words”的文章组。

df = pd.DataFrame([[  0,  6],
       [  1,  10],
       [  3,   5],
       [  4,   7],
       [  5,  26],
       [  6,   7],
       [  9,   4],
       [ 10, 133],
       [ 11,  42],
       [ 12,   1]], columns=['ARTICLE', 'WORD_COUNT'])

df
Out[15]: 
   ARTICLE  WORD_COUNT
0        0           6
1        1          10
2        3           5
3        4           7
4        5          26
5        6           7
6        9           4
7       10         133
8       11          42
9       12           1

那么如果min_words = 20这是所需的输出:

    df
Out[17]: 
   ARTICLE  WORD_COUNT  MERGED
0        0           6       0
1        1          10       0
2        3           5       0
3        4           7       1
4        5          26       1
5        6           7       2
6        9           4       2
7       10         133       2
8       11          42       3
9       12           1       4

如上所示,最终的文章有可能不会满足 min_words 条件,这没关系。


阅读 4

收藏
2024-11-20

共1个答案

小能豆

要根据累积字数合并文章并添加 MERGED 列,我们可以按以下步骤进行操作:

  1. 遍历 WORD_COUNT 列,计算累积和。
  2. 每次累积和超过 min_words 时,为每个文章组分配一个新的组号。
  3. 将每组文章分配一个 MERGED 值。

以下是实现代码:

import pandas as pd

# 输入数据
df = pd.DataFrame([[  0,  6],
                   [  1,  10],
                   [  3,   5],
                   [  4,   7],
                   [  5,  26],
                   [  6,   7],
                   [  9,   4],
                   [ 10, 133],
                   [ 11,  42],
                   [ 12,   1]], columns=['ARTICLE', 'WORD_COUNT'])

# 设置最小字数
min_words = 20

# 初始化累积字数和组号
cumulative_sum = 0
merged_group = 0
merged_column = []

# 遍历每一行,计算累积字数并分配组号
for word_count in df['WORD_COUNT']:
    cumulative_sum += word_count
    if cumulative_sum >= min_words:
        merged_group += 1
        cumulative_sum = 0  # 重置累积字数
    merged_column.append(merged_group)

# 添加 'MERGED' 列
df['MERGED'] = merged_column

# 输出结果
print(df)

解释:

  • cumulative_sum: 追踪当前的累计字数。
  • merged_group: 每当累计字数达到或超过 min_words 时,我们增加一个新的组号,并重置 cumulative_sum
  • merged_column: 记录每个文章对应的 MERGED 值。

输出结果:

   ARTICLE  WORD_COUNT  MERGED
0        0           6       0
1        1          10       0
2        3           5       0
3        4           7       1
4        5          26       1
5        6           7       2
6        9           4       2
7       10         133       2
8       11          42       3
9       12           1       4

如您所见,文章根据累计字数合并,并正确地分配了 MERGED 列。

2024-11-20