【问题标题】:how to merge two consecutive records in a Data Frame in Python Based on Condition如何根据条件在Python中合并数据框中的两个连续记录
【发布时间】:2020-10-25 12:47:43
【问题描述】:

我有一个如下的数据框:

我想合并列['clauses_last_word_chk']中具有False值的子句calumn中的所有连续子句,然后删除合并后的行,并保留列中具有True的行['clauses_last_word_chk']

例如: 前三行具有要合并的 False 值,然后删除第二行和第三行。 第 4、第 5、第 6 将保持不变而不合并。 将第 7 行和第 8 行合并,然后删除第 8 行,如下所示:

下面是我的代码:

for i in range (0,len(general_df)):
    if (general_df['clauses_last_word_chk'][i]==False) and i<len(general_df):
        
        general_df['clauses_merged'][i]=str(general_df['clauses'][i])+','+str(general_df['clauses'][i+1])
        general_df.drop( general_df['clauses_merged'][i+1], inplace=True)
    else:
        general_df['clauses_merged'][i]=general_df['clauses'][i]

【问题讨论】:

  • 请不要发布图片。将示例输入和预期输出作为文本发布。
  • @Ahmed Safwat Ewida 为什么需要合并第 7 行和第 8 行,因为它与您之前的要求相矛盾 - “我想合并列中具有 False 值的子句 calumn 中的所有连续子句 ['条款_last_word_chk']"
  • 是的,如果 ['clauses_last_word_chk']=False 并且下一行中的值等于 = True,我还想合并行

标签: python nlp


【解决方案1】:

如果您只想删除列中具有 False 值的行,您可以执行以下操作,而不是合并所有此类行并删除该行。

general_df = general_df[general_df['clauses_last_word_chk'] == True]

这使您可以过滤 Clauses_last_word_chk 列中具有 False 值的行,而无需合并它们。

【讨论】:

  • 我想把连续的有假值的子句合并,把有真值的子句保持原样不合并,保持相同的顺序
  • 示例输入和所需输出在这里非常有用。这个问题有点难理解。您在描述中提到要在合并后删除具有 False 值的子句,这就是我建议过滤的原因。
【解决方案2】:

我得到了如下答案:

fil = general_df['clauses_last_word_chk'].ne(False).cumsum()
ccc = general_df.groupby(fil).agg({'Article':'first','clauses':','.join})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2020-04-24
    相关资源
    最近更新 更多