我有一个 pandas df,里面有与文章相对应的字数。我希望能够添加另一列MERGED,该列基于具有最小累计和“min_words”的文章组。
MERGED
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这是所需的输出:
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 条件,这没关系。
要根据累积字数合并文章并添加 MERGED 列,我们可以按以下步骤进行操作:
WORD_COUNT
min_words
以下是实现代码:
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
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 列。