我有一个数据框,它根据每个 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,它复制了第一行的所有数据并将其放在第二行。我更希望那些保持为空,这样一旦我收到最终输出,相同的数据就不会被处理两次。所以我想要的最终输出是:
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
我永远不知道哪些列可以合并/展平,所以我不能删除基于某些列的重复项(我不认为)。关于如何实现此输出的任何建议都会很棒!
我在这里使用 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
我是一名优秀的程序员,十分优秀!