Python 熊猫在可能的地方把行弄平

Python 熊猫在可能的地方把行弄平,python,pandas,Python,Pandas,我有一个dataframe,它根据每个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

我有一个dataframe,它根据每个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   

我永远不知道哪些列可以合并/展平,所以我不能基于某些列删除重复项(我不认为)。任何关于如何实现这一输出的建议都将非常好

这里我使用的是排序后的
,因为它更容易阅读

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

如果需要速度,请检查