对于数据框df
df = pd.DataFrame({'id': ['1', '1', None, None, '1', '2', '2', '3', None, '4'],
'last_name': ['Clinton', 'Clinton', 'Clinton','Clinton', None, 'Bush', 'Bush', None, 'Obama', 'Obama'],
'first_name': ['Bill', 'William', 'Bill', 'William', None, 'Georg W.', 'Georg', None, 'Barack', 'Barack']})
df['id'] = df['id'].astype('category')
print(df)
给出下表
id last_name first_name 0 1 Clinton Bill 1 1 Clinton William 2 NaN Clinton Bill 3 NaN Clinton William 4 1 NaN None 5 2 Bush Georg W. 6 2 Bush Georg 7 3 NaN None 8 NaN Obama Barack 9 4 Obama Barack
我想按id
和last_name
分组,删除重复项,并删除None
(如果有多个条目)。所以输出应该像
first_name id last_name 1 Clinton Bill Clinton William 2 Bush Georg W. Bush Georg 3 None None 4 Obama Barack
我的问题之一是groupby
不起作用,因为它排除了None
/ NaN
值。
有什么好主意吗?
答案 0 :(得分:1)
IIUC,假设您的数据框具有与发布的数据框相似的结构,则可以使用ffill()
并按其分组,然后,dropna
仅在每个分组的len
为大于1。
df.groupby([df.id.ffill(), df.last_name.ffill()]).apply(lambda s: s.dropna() if len(s) > 1 else s).reset_index(drop=True)
id last_name first_name id2
0 1 Clinton Bill 1
1 1 Clinton William 1
2 2 Bush Georg W. 2
3 2 Bush Georg 2
4 3 None None 3
5 NaN Obama Barack 3