我有一个数据帧,该数据帧根据我每个ID上的信息量为某些ID输出多行,并且我希望在可能的情况下将其展平。我的数据框示例如下。
id address city state country company title email
001 80 Fake St. San F. CA USA null null personal@gmail.com
001 null null null null Amazon CEO null
002 2 Test Ave. San F. CA USA null null test@aol.com
002 null null null null Google CEO googleceo@gmail.com
我希望将001的行合并为一个,因为所有值都可以放入同一行。对于002,可以将它们放在单独的行中是可以的,因为无论如何都需要存储两行电子邮件,所以必须两行。
我尝试过
df.groupby('id', squeeze=True)
这使我接近想要的结果,但是对于002,它会复制第一行中的所有数据,并将其放在第二行中。我希望这些值保持为null,这样一来,我收到最终输出后,相同的数据就不会被处理两次。所以我想要的最终输出是:
id address city state country company title email
001 80 Fake St. San F. CA USA Amazon CEO personal@gmail.com
002 2 Test Ave. San F. CA USA null null test@aol.com
002 null null null null Google CEO googleceo@gmail.com
我从不知道哪些列将能够被合并/展平,所以我不能基于某些列删除重复项(我不认为)。关于如何实现此输出的任何建议都很棒!
答案 0 :(得分:1)
这里我使用sorted
,因为它更容易阅读
yourdf=df.groupby('id').apply(lambda x : x.apply(lambda y: sorted(y,key=pd.isnull))).dropna(thresh=2)
yourdf
id address city state country company title email
0 1 80FakeSt. SanF. CA USA Amazon CEO personal@gmail.com
2 2 2TestAve. SaF. CA USA Google CEO test@aol.com
3 2 NaN NaN NaN NaN NaN NaN googleceo@gmail.com
如果需要速度,请选中justify