Как объединить несколько строк с одинаковым индексом, у каждой строки есть только одно истинное значение в пандах? - PullRequest
0 голосов
/ 28 января 2019

У меня есть pandas dataframe, который имеет следующую форму:

                          OPEN_INT PX_HIGH PX_LAST VOL
timestamp  ticker source     
2018-01-01   AAPL   NYSE         1      NaN    NaN NaN
2018-01-01   AAPL   NYSE       NaN        2    NaN NaN
2018-01-01   AAPL   NYSE       NaN      NaN      3 NaN
2018-01-01   AAPL   NYSE       Nan      NaN    NaN   4
2018-01-01   MSFT   NYSE         5      NaN    NaN NaN
2018-01-01   MSFT   NYSE       NaN        6    NaN NaN
2018-01-01   MSFT   NYSE       NaN      NaN      7 NaN
2018-01-01   MSFT   NYSE       Nan      NaN    NaN   8

В каждом столбце для каждой группы (отметка времени, тикер, источник) гарантировано только одно значение, все остальные значения - Nan,В любом случае я могу объединить их в одну строку, чтобы она выглядела следующим образом:

                          OPEN_INT PX_HIGH PX_LAST VOL
timestamp  ticker source     
2018-01-01   AAPL   NYSE         1      2        3   4
2018-01-01   MSFT   NYSE         5      6        7   8

Я пытался использовать df.groupby(['timestamp', 'ticker', 'source']).agg(lambda x: x.dropna(), но получил сообщение об ошибке Function does not reduce.

1 Ответ

0 голосов
/ 28 января 2019

Использовать GroupBy.first:

df.groupby(['timestamp', 'ticker', 'source']).first()

Если всегда объединяется только одно значение для групп по max, min, sum, mean ...:

df.groupby(['timestamp', 'ticker', 'source']).max()
...