如何根据其他列的差异加入文本列?

克里斯_2020

我有以下数据框

       top   bottom                      fontname    size       x0       x1                           text
0   62.890   73.890  HNGMRP+HelveticaNeueLTStd-Bd  11.000  321.730  520.115  RISK MANAGEMENT AND INTERNAL 
1   76.893   87.893  HNGMRP+HelveticaNeueLTStd-Bd  11.000  321.730  376.334                        CONTROL
2  146.897  157.897  HNGMRP+HelveticaNeueLTStd-Bd  11.000   76.535  203.662              COMPANY SECRETARY
3  272.913  283.913  HNGMRP+HelveticaNeueLTStd-Bd  11.000   76.535  222.593          INDEPENDENT AUDITORS 
4  286.916  297.916  HNGMRP+HelveticaNeueLTStd-Bd  11.000   76.535  167.164                   REMUNERATION

我想要

  1. 加入的文字row[i].textrow[i+1].textabs(row[i].bottom - row[i+1].top) < row[i].size
  2. 替换joined_textrow[i].text
  3. 替换row[i].bottomrow[i+1].bottom
  4. 丢弃 row[i+1]

例如:

  • row 0textRISK MANAGEMENT AND INTERNAL
  • row 1textCONTROL
  • row 0并且row 1都具有相同的size:11
  • abs(row[0].bottom - row[1].top) 是3.003

因为 3.003 < 11

  • 期望的row[0].textRISK MANAGEMENT AND INTERNAL CONTROL
  • 期望的row[0].bottom87.893
  • row[1] 从数据框中删除

为了清楚起见,期望的结果如下:

       top   bottom                      fontname    size       x0       x1                           text
0   62.890   87.893  HNGMRP+HelveticaNeueLTStd-Bd  11.000  321.730  520.115  RISK MANAGEMENT AND INTERNAL CONTROL
1  146.897  157.897  HNGMRP+HelveticaNeueLTStd-Bd  11.000   76.535  203.662  COMPANY SECRETARY
2  272.913  297.916  HNGMRP+HelveticaNeueLTStd-Bd  11.000   76.535  222.593  INDEPENDENT AUDITORS REMUNERATION

这是我尝试的:

def df_section_text(self) -> pd.DataFrame:
    df_title_text = self.df_title_text
    df_next_title_text = self.df_title_text.shift(-1).dropna()
    df_section_text = pd.DataFrame()
    
    for next_title, title in zip(df_next_title_text.itertuples(index=False),  df_title_text.itertuples(index=False)):
        diff_btw_titles = abs(title.bottom - next_title.top)
        
        if diff_btw_titles < title.size:
            title = pd.DataFrame([title]).to_dict()
            title['bottom'][0] = next_title.bottom
            title['text'][0] += next_title.text
            title = pd.DataFrame.from_dict(title)
        
        df_section_text = df_section_text.append([title])
    
    df_section_text = df_section_text.drop_duplicates(subset=['bottom']).reset_index()
    return df_section_text

self.df_title_text上面显示的问题数据框在哪里

当行数增加时,它很慢。还有另一种更快,更优雅的方式来产生预期的结果吗?谢谢。

贝尼

让我们试着使用shiftcumcount获得亚组那么我们只需要基于该键做groupbyagg

s = (df['bottom'].shift()-df['top']).abs().gt(df['size']).cumsum()

out = df.groupby(s).agg({'top':'first',
                         'bottom':'last',
                         'fontname':'first',
                         'size':'first',
                         'x0':'first',
                         'x1':'first',
                         'text':' '.join})


out
Out[20]: 
       top   bottom  ...       x1                               text
0   62.890   87.893  ...  520.115  RISKMANAGEMENTANDINTERNAL CONTROL
1  146.897  157.897  ...  203.662                   COMPANYSECRETARY
2  272.913  297.916  ...  222.593   INDEPENDENTAUDITORS REMUNERATION
[3 rows x 7 columns]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

熊猫:如何根据其他列值的条件对列求和?

来自分类Dev

如何根据其他列查找一列的区别

来自分类Dev

如何根据其他列使用按列分组

来自分类Dev

如何根据其他列的颜色更改列的颜色?

来自分类Dev

如何根据熊猫中的其他列添加新列?

来自分类Dev

根据其他列条件更新列

来自分类Dev

根据其他两列拆列

来自分类Dev

根据其他列的值过滤列

来自分类Dev

根据其他列值创建列

来自分类Dev

根据其他列的内容汇总列

来自分类Dev

如何根据其他行中的列值进行过滤?

来自分类Dev

如何根据其他行计算列的相对值?

来自分类Dev

如何根据SQL中的其他列减少值

来自分类Dev

R:如何根据其他列的名称创建新变量

来自分类Dev

熊猫:如何根据其他列值的条件求和?

来自分类Dev

如何根据cakephp中的其他列值求和

来自分类Dev

JOOQ 如何根据其他列值转换 JSON?

来自分类Dev

如何根据其他列更新向量中的值

来自分类Dev

如何根据其他列的结果运行SELECT语句?

来自分类Dev

如何根据其他索引从其他数据框的列中获取值?

来自分类Dev

如何根据其他表中的其他关系从 1 列中选择 2 个数据

来自分类Dev

如何根据一列的唯一值将其他列的行转换为列?

来自分类Dev

如何根据多列其他列中的值减去一列中的值?

来自分类Dev

pyspark如何在键上加入但也包括其他列?

来自分类Dev

根据其他内容添加其他列(在R中)

来自分类Dev

根据其他列值选择值

来自分类Dev

根据其他列自动编号

来自分类Dev

根据其他列条件选择记录

来自分类Dev

根据其他行填充SQL列