У меня есть фрейм данных, как показано ниже –
|Business Name|Case Number|Violation|Regulation(s)|Payments|
0|NaN|NaN|NaN|30 CFR 1241.60(b)(1) 30 CFR |NaN|
1|NaN|NaN|Business knowingly or willfully|Part 1218,Subparts B, D, E and|NaN|
2|CHI OPERATING CO|CP17‐085|sales months January 2011|30 CFR 1241.50‐52|$142,310|
3|NaN|NaN|Business failed to report production|30 CFR Part 1210, Subpart C|NaN|
4|CROWHEARTENERGYLLC|CP19‐050|Reports(Forms ONRR‐4054)for22production|30CFR1241.50‐52|$5,544|
5|NaN|NaN|Business failed to submit Reports of Sale|NaN|NaN|
6|CHIZUM OIL LLC|CP20‐005|March 2018 through August 2018.|1241.50‐5|$7,497|
7|NaN|NaN|ONRR‐4054) for production months February 2009|NaN|NaN|
8|CHIZUM OIL LLC|CP19‐049|through November 2018. 1241.50‐52|NaN |$3,421|
Можем ли мы применить проверку названия компании, если NaN, затем оставить его пустым и не считать его строкой, и всякий раз, когда приходит значение, сохраняйте его как строку и объединяйте все значения из вышеуказанных строк в эту строку.
Ожидаемый результат -
|Business Name|Case Number|Violation|Regulation(s)|Payments|
0|CHI OPERATING CO|CP17‐085|Business knowingly or willfully sales months January 2011|30 CFR 1241.60(b)(1) 30 CFR Part 1218,Subparts B, D, E and 30 CFR 1241.50‐52|$142,310|
1|CROWHEARTENERGYLLC|CP19‐050|Business failed to report production Reports(Forms ONRR‐4054)for22production|30 CFR Part 1210, Subpart C 30CFR1241.50‐52|$5,544|
2|CHIZUM OIL LLC|CP20‐005|Business failed to submit Reports of Sale March 2018 through August 2018.|1241.50‐5|$7,497|
3|CHIZUM OIL LLC|CP19‐049|ONRR‐4054) for production months February 2009 through November 2018. 1241.50‐52|NaN |$3,421|
Используйте Series.bfill для заполнения пропущенных значений для групп совокупной пользовательской лямбда-функции с помощью join
и удаления пропущенных значений:
out = (df.groupby(df.pop('Business Name').bfill())
.agg(lambda x: ' '.join(x.dropna()))
.reset_index())
print (out)
Business Name Case Number Violation Regulation(s) Payments Unnamed: 6
0 CHI OPERATING CO CP17‐085 Business knowingly or willfully sales months J... 30 CFR 1241.60(b)(1) 30 CFR Part 1218,Subpart... $142,310
1 CROWHEARTENERGYLLC CP19‐050 Business failed to report production Reports(F... 30 CFR Part 1210, Subpart C 30CFR1241.50‐52 $5,544
Решение следует изменить, если необходимо объединить каждое непропущенное значение отдельно (строки 3,4 и строки 5,6):
print (df)
Business Name Case Number Violation Regulation(s) Payments
0 NaN NaN NaN 30 CFR 1241.60(b)(1) 30 CFR NaN
1 NaN NaN Business knowingly or willfully Part 1218,Subparts B, D, E and NaN
2 CHI OPERATING CO CP17‐085 sales months January 2011 30 CFR 1241.50‐52 $142,310
3 NaN NaN Business failed to report production 30 CFR Part 1210, Subpart C NaN
4 CROWHEARTENERGYLLC CP19‐050 Reports(Forms ONRR‐4054)for22production 30CFR1241.50‐52 $5,544
5 NaN NaN Business failed to report production 30 CFR Part 1210, Subpart C NaN
6 CROWHEARTENERGYLLC CP19‐050 Reports(Forms ONRR‐4054)for22production 30CFR1241.50‐52 $5,544
out = (df.groupby(df['Business Name'].notna().iloc[::-1].cumsum().iloc[::-1], sort=False)
.agg(lambda x: ' '.join(x.dropna()))
.reset_index(drop=True))
print (out)
Business Name Case Number Violation Regulation(s) Payments Unnamed: 6
0 CHI OPERATING CO CP17‐085 Business knowingly or willfully sales months J... 30 CFR 1241.60(b)(1) 30 CFR Part 1218,Subpart... $142,310
1 CROWHEARTENERGYLLC CP19‐050 Business failed to report production Reports(F... 30 CFR Part 1210, Subpart C 30CFR1241.50‐52 $5,544
2 CROWHEARTENERGYLLC CP19‐050 Business failed to report production Reports(F... 30 CFR Part 1210, Subpart C 30CFR1241.50‐52 $5,544
Если в реальных данных используются комбинированные строки и числовые столбцы, можно использовать:
print (df)
Business Name Case Number Violation Regulation(s) Payments col
0 NaN NaN NaN 30 CFR 1241.60(b)(1) 30 CFR NaN 4
1 NaN NaN Business knowingly or willfully Part 1218,Subparts B, D, E and NaN 1
2 CHI OPERATING CO CP17‐085 sales months January 2011 30 CFR 1241.50‐52 $142,310 0
3 NaN NaN Business failed to report production 30 CFR Part 1210, Subpart C NaN 1
4 CROWHEARTENERGYLLC CP19‐050 Reports(Forms ONRR‐4054)for22production 30CFR1241.50‐52 $5,544 7
5 NaN NaN Business failed to report production 30 CFR Part 1210, Subpart C NaN 1
6 CROWHEARTENERGYLLC CP19‐050 Reports(Forms ONRR‐4054)for22production 30CFR1241.50‐52 $5,544 2
out = (df.groupby(df['Business Name'].notna().iloc[::-1].cumsum().iloc[::-1], sort=False)
.agg(lambda x: x.sum() if np.issubdtype(x.dtype, np.number) else ' '.join(x.dropna()))
.reset_index(drop=True))
print (out)
Business Name Case Number Violation Regulation(s) Payments col
0 CHI OPERATING CO CP17‐085 Business knowingly or willfully sales months J... 30 CFR 1241.60(b)(1) 30 CFR Part 1218,Subpart... $142,310 5
1 CROWHEARTENERGYLLC CP19‐050 Business failed to report production Reports(F... 30 CFR Part 1210, Subpart C 30CFR1241.50‐52 $5,544 8
2 CROWHEARTENERGYLLC CP19‐050 Business failed to report production Reports(F... 30 CFR Part 1210, Subpart C 30CFR1241.50‐52 $5,544 3
@emileymille - Я могу попробовать.
конечно, пожалуйста, помогите мне.
Я отредактировал свой вопрос в этом сообщении, он не работает для повторяющихся названий компаний, он делает его одной строкой, можете посмотреть?
@emileymille — Да, это во второй части моего ответа.
@emileymille - кстати, я использую разные библиотеки для анализа PDF, и лучше всего ваше решение - я пробую это
Давайте продолжим обсуждение в чате.
можно ли обрабатывать PDF-файлы такого типа - onrr.gov/document/2021.pdf и onrr.gov/document/2018.pdf ? Я использовал библиотеку tabula-py для преобразования этого PDF-файла в фрейм данных, например: table = tabula.read_pdf(pdf_url,pages=0) ,df = [таблица для таблицы в таблицах], а также поднял вопрос о переполнении стека - stackoverflow.com /questions/78870815/…, любая помощь будет очень признательна.