熊猫尽可能平整行

时间:2019-01-11 01:12:31

标签: python pandas

我有一个数据帧,该数据帧根据我每个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   

我从不知道哪些列将能够被合并/展平,所以我不能基于某些列删除重复项(我不认为)。关于如何实现此输出的任何建议都很棒!

1 个答案:

答案 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