Самослияние панд заблокировало недостающую структуру - PullRequest
0 голосов
/ 02 мая 2018

У меня есть этот кадр данных панд:

from numpy import nan
import pandas as pd
data = {'A': {0: 1, 1: 2, 2: 1, 3: 2}, 'B': {0: 0.1, 1: 0.5, 2: 0.1, 3: 0.5}, 
'C1': {0: 9.0, 1: 9.0, 2: nan, 3: nan}, 'C2': {0: 9.0, 1: 9.0, 2: nan, 3: nan}, 'D1': {0: nan, 1: nan, 2: 6.0, 3: 6.0}, 'D2': {0: nan, 1: nan, 2: 6.0, 3: 6.0}}
data = pd.DataFrame(data)

Результат:

   A    B   C1   C2   D1   D2
0  1  0.1  9.0  9.0  NaN  NaN
1  2  0.5  9.0  9.0  NaN  NaN
2  1  0.1  NaN  NaN  6.0  6.0
3  2  0.5  NaN  NaN  6.0  6.0

Теперь, очевидно, этот фрейм данных можно консолидировать, поскольку он излишне заблокирован. Ожидаемый результат:

   A    B   C1   C2   D1   D2
0  1  0.1  9.0  9.0  6.0  6.0
1  2  0.5  9.0  9.0  6.0  6.0

В общем, я говорю о фрейме данных, в котором большинство столбцов заполнены или отсутствуют случайным образом, но в фрейме данных существует этот тип заблокированной неслучайной отсутствующей структуры, которую можно безопасно объединить. Проблема в том, что мы не знаем заранее, какие столбцы должны быть агрегированы. Как с этим бороться?

1 Ответ

0 голосов
/ 02 мая 2018

Расширяя Ответ Вена , вам нужно будет определить, какие столбцы не равны NULL, а затем groupby для этих:

data.groupby(
   data.columns[data.notnull().all()].tolist(), as_index=False
).first()

   A    B   C1   C2   D1   D2
0  1  0.1  9.0  9.0  6.0  6.0
1  2  0.5  9.0  9.0  6.0  6.0
...