【发布时间】:2018-06-25 07:50:12
【问题描述】:
对于给定的数据框df
df = pd.DataFrame({
'id': [1, 2, 2],
'name': ['Peter', 'Max', None],
'age': [50.0, np.nan, 60.0]
})
如果分组行的列中只有一个None 或nan,我想groupby 并合并数据,以便生成的df 看起来像
age id name
id
1 0 50.0 1 Peter
2 1 60.0 2 Max
有没有比这个更好的解决方案:
def f(df):
names = set(df['name']) - {None}
if len(names) == 1:
df['name'] = names.pop()
else:
print('Error: Names are not mergeable:', names)
ages = {age for age in df['age'] if ~np.isnan(age)}
if len(ages) == 1:
df['age'] = ages.pop()
else:
print('Error: Ages are not mergeable:', ages)
df = df.drop_duplicates()
return df
df.groupby('id').apply(f)
【问题讨论】:
-
如果您有两行以上的缺失值怎么办?
标签: python pandas nan pandas-groupby