Удалить NAN и создать поле значения в виде строки?

У меня есть фрейм данных, как показано ниже –

 |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|

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте 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 - Я могу попробовать.

jezrael 16.08.2024 07:57

конечно, пожалуйста, помогите мне.

emiley mille 16.08.2024 08:00

Я отредактировал свой вопрос в этом сообщении, он не работает для повторяющихся названий компаний, он делает его одной строкой, можете посмотреть?

emiley mille 16.08.2024 08:24

@emileymille — Да, это во второй части моего ответа.

jezrael 16.08.2024 08:24

@emileymille - кстати, я использую разные библиотеки для анализа PDF, и лучше всего ваше решение - я пробую это

jezrael 16.08.2024 08:25

Давайте продолжим обсуждение в чате.

emiley mille 16.08.2024 08:31

Другие вопросы по теме