Python 合并数据帧行以填充缺少的数据

Python 合并数据帧行以填充缺少的数据,python,pandas,Python,Pandas,假设我有一个数据框,其中的行包含缺少的数据,但有一组列充当键: 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.n

假设我有一个数据框,其中的行包含缺少的数据,但有一组列充当键:

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
我将如何使用重复键“挤压”这些行,以拾取非nan值(如果存在)


索引并不重要,并且总是最多有一行包含非NaN数据。我想我需要使用
groupby(['id','name'])
,但我不确定从那里开始。如果每个组始终只有一个非
NaN
s值,则可以通过多种方式聚合:

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

或:

或:

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)