Панды находят закрытые значения в одной строке - PullRequest
0 голосов
/ 29 декабря 2018

Мне нравится находить и извлекать весь закрытый текст, основываясь на одной строке и расстоянии между текстом <10 (x2 - x <10) из кадра данных pandas.x, y, x2, y2 - координаты ограничительной рамки, содержащей текст.Тексты могут быть разными каждый раз (строка, число с плавающей точкой, int, ...). </p>

В моем примере я хочу извлечь «Сумма НДС» idx 70 и 71: они находятся на одной строке, а расстояние от 'НДС '[x] -' Сумма '[x2] <10 </p>

    line    text    x       y       x2      y2
29  11      Amount  2184    1140    2311    1166
51  14      Amount  1532    1450    1660    1476
66  15      Amount  1893    1500    2021    1527
70  16      Amount  1893    1551    2022    1578
71  16      VAT     2031    1550    2121    1578

Окончательный результат должен быть:

    line    text    x       y       x2      y2
70  16      Amount  1893    1551    2022    1578
71  16      VAT     2031    1550    2121    1578

, и извлечение должно работать для 2 или более текста в одной строке и(х2 - х <10).Другой результат с 3 значениями: </p>

    line    text    x       y       x2      y2
5   16      Total   1755    1551    1884    1578
8   16      Amount  1893    1551    2022    1578
20  16      VAT     2031    1550    2121    1578

Я нахожу способ найти те же строки:

same_line = find_labels['line'].map(find_labels['line'].value_counts() > 1)

и пытаюсь найти близкие значения x2- x <10, но я не знаю, как это сделать. </strong> Я пытаюсь сделать цикл или использовать .cov (), но не работает ...

Некоторые могут мне помочь?

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 29 декабря 2018

Если предположить, что НДС и сумма проиндексированы на одно и то же значение line, я бы сделал следующее:

# set the index in line
df.set_index('line', inplace=True)

#split up the table into the 2 parts to work on
amount_df = df[df['text'] == 'Amount']
vat_df = df[df['text'] == 'VAT']

# join the 2 tables to get everything on one row
df2 = amount_df.join(vat_df, how='outer', on='line', rsuffix='amount', lsuffix='vat')

# do the math
condition = df2['xvat'] - df2['x2amount'] < 10
df2 = df2[condition]

df2['text'] = 'Total'
df2['x'] = df2['xvat'] - (df2['xamount'] - df2['xvat'])
df2['y'] = df2['yvat'] - (df2['yamount'] - df2['yvat'])
df2['x2'] = df2['x2vat'] - (df2['x2amount'] - df2['x2vat'])
df2['y2'] = df2['y2vat'] - (df2['y2amount'] - df2['y2vat'])
df.append(df2[['text','x','y','x2','y2']])

Я получу

enter image description here

не совсем то, что вы просили, но вы поняли идею.Не уверен, что правильная математика дает вам результаты, которые вы показываете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...