Объедините строки Dataframe, чтобы заполнить недостающие данные - PullRequest
2 голосов
/ 20 сентября 2019

Предположим, у меня есть фрейм данных со строками, содержащими пропущенные данные, но набор столбцов, выступающих в качестве ключа:

import pandas as pd
import numpy as np
data = {"id": [1, 1, 2, 2, 3, 3, 4 ,4], "name": ["John", "John", "Paul", "Paul", "Ringo", "Ringo", "George", "George"], "height": [178, np.nan, 182, np.nan, 175, np.nan, 188, np.nan], "weight": [np.nan, np.NaN, np.nan, 72, np.nan, 68, np.nan, 70]}

df = pd.DataFrame.from_dict(data)
print(df)


id    name  height  weight
0   1    John   178.0     NaN
1   1    John     NaN     NaN
2   2    Paul   182.0     NaN
3   2    Paul     NaN    72.0
4   3   Ringo   175.0     NaN
5   3   Ringo     NaN    68.0
6   4  George   188.0     NaN
7   4  George     NaN    70.0

Как бы мне было "сжать" эти строки с помощью дубликатов ключей, чтобы выбратьзначение non-nan (если оно существует)?

desired output:
id    name  height  weight
0   1    John   178.0     NaN
2   2    Paul   182.0     72.0
4   3   Ringo   175.0     68.0
6   4  George   188.0     70.0

Индекс не имеет значения, и всегда есть не более одной строки с данными не-NaN.Я думаю, что мне нужно использовать groupby(['id', 'name']), но я не уверен, куда идти.

1 Ответ

2 голосов
/ 20 сентября 2019

Если всегда есть только одно не NaN s значений на группы, можно агрегировать разными способами:

df = df.groupby(['id', 'name'], as_index=False).first()

Или:

df = df.groupby(['id', 'name'], as_index=False).last()

Или:

df = df.groupby(['id', 'name'], as_index=False).mean()

Или:

df = df.groupby(['id', 'name'], as_index=False).sum(min_count=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...