Панды группируют по столбцу и берут ненулевые значения в разных строках для каждого столбца [дубликаты]

У меня есть интересный вопрос, для которого у меня нет встроенного решения в Pandas.

У меня есть такие данные:

A B    C    D    E     F
1 null null Red  null  12
1 89   76   Red  null  null
1 null null null null  12

Я пытаюсь получить вывод, например:

1 89 76 Red null 12

Теперь эти данные представляют собой сообщения, приходящие в разное время. Многие сообщения относятся к одной транзакции.

Итак, предположим, что A является идентификатором транзакции. Некоторые сообщения с одинаковым идентификатором имеют значение для столбца B, некоторые имеют значение для столбца C.

Итак, я хочу сгруппировать по уникальному идентификатору, а затем получить ненулевые значения для каждого столбца.

Итак, это задача группировки, а затем агрегирования. Но в отличие от count или подобных вещей, я действительно создаю новую строку.

Я не нахожу способ сделать это в pandas. Любая помощь приветствуется, спасибо!

Пример:>

    A   B        C       D
    1   null    null    100
    1   90      null    null
    2   null    1000    999
    1            80 
    2   1000    null    799

 df.groupby('A').first()
      B     C    D
A
1  null  null  100
2  null  1000  999

Но требуемый результат:

     B     C    D
A
1  90     80  100
2  1000  1000  999

person david nadal    schedule 05.06.2018    source источник
comment
Что-то вроде df.groupby('A').first()? Это может быть дубликат.   -  person cs95    schedule 05.06.2018
comment
каковы окончательные данные, которые вы ожидаете?   -  person Sudipta Mondal    schedule 05.06.2018
comment
Вы можете подтвердить, что именно вы ищете?   -  person cs95    schedule 05.06.2018
comment
@coldspeed я добавил образец вывода: только ненулевые значения из каждой строки с одним и тем же идентификатором   -  person david nadal    schedule 05.06.2018
comment
@jezrael это не дубликат... как он может быть таким же? вопросы задают две разные вещи.. я обновил вопрос с образцом вывода для ясности   -  person david nadal    schedule 05.06.2018
comment
@davidnadal - Как вы думаете df.replace('null', np.nan).groupby('A').first() ?   -  person jezrael    schedule 05.06.2018
comment
@jezrael нет .. я не хочу заменять null на np nan .. это больше похоже на слияние строк с одинаковым идентификатором после groupby .. я хочу извлечь все ненулевые значения для каждого столбца после их группировки с помощью тот же идентификатор... а затем создайте одну строку для каждой группы..   -  person david nadal    schedule 05.06.2018
comment
ОК, можно больше non-nans значений, как в последнем столбце 12, null, 15?   -  person jezrael    schedule 05.06.2018
comment
@jezrael, это возможно .. тогда я просто хочу выбрать первый, я думаю .. хотя я уверен, что этот сценарий будет довольно редким в имеющихся у меня данных ... в любом случае, я беспокоился об этом условии и выборе первое значение там будет работать..   -  person david nadal    schedule 05.06.2018
comment
@davidnadal - Но df.groupby('A').first() не работает? Почему? Я тестирую это и работает хорошо.   -  person jezrael    schedule 05.06.2018
comment
@jezrael pandas.pydata. org/pandas-docs/version/0.22/generated/ Groupby сначала просто берет первую строку из всех строк группы с одинаковым идентификатором, верно? Он не принимает первые ненулевые значения для каждого столбца. Как здесь each-group-by-group/30492281?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa" title="pandas, как выбрать первую строку в каждой группе по группе"> stackoverflow.com/questions/30486417/   -  person david nadal    schedule 05.06.2018
comment
@davidnadal - хммм, но он работает так, как вам нужно - сначала возвращает не нан. Попробуйте проверить это в небольшом фрейме данных   -  person jezrael    schedule 05.06.2018
comment
@jezrael хорошо, позвольте мне проверить набор данных .. спасибо!   -  person david nadal    schedule 05.06.2018
comment
@jezrael нет... это не работает... я проверял на csv   -  person david nadal    schedule 05.06.2018
comment
null это NaN?   -  person jezrael    schedule 05.06.2018
comment
@jezrael я тоже привел пример   -  person david nadal    schedule 05.06.2018
comment
Так что нужно df.replace('null', np.nan).groupby('A').first()   -  person jezrael    schedule 05.06.2018
comment
@jezrael работает на этом примере!! Не могли бы вы объяснить в качестве ответа, почему это происходит, какое отношение к этому имеет np.nan replacmenet?   -  person david nadal    schedule 05.06.2018
comment
потому что first получают первые значения, отличные от nan, для каждой группы   -  person jezrael    schedule 05.06.2018
comment
Никто не ответил @davidnadal. Привет, Дэвид, если вам все еще интересно, как решить вашу проблему: вот ответ (я проверил его): df = df.groupby('A').apply(lambda x: x.bfill().ffill()) df.groupby('A').last()   -  person Hernán Borré    schedule 24.04.2019