我有一个数据帧,其中每个记录都可能有多个值对(例如,email1与value1配对)。每条记录可以有0到6个这样的对。数据帧看起来有点像这样:
id email1 value1 email2 value2 email3 value3 ...
1 x@test.com 123 NaN NaN NaN NaN
2 NaN NaN y@test.com 456 NaN NaN
3 z@test.com 789 NaN NaN a@test.com 012
...我想将值对向左移动,减少不必要的列的数量,并将上面的示例转换为如下所示:
id email1 value1 email2 value2
1 x@test.com 123 NaN NaN
2 y@test.com 456 NaN NaN
3 z@test.com 789 a@test.com 012
...做这件事最好的方法是什么?
发布于 2021-08-04 10:04:59
如果它修复了如果电子邮件是NaN,那么它的腐蚀值也是NaN,那么:
使用转置,然后使用agg(),然后再次转置,最后删除具有NaN的列:
df=df.T.agg(sorted,key=pd.isnull).T.dropna(axis=1,how='all')或
df=(pd.DataFrame(df.agg(sorted,key=pd.isnull,axis=1).tolist(),columns=df.columns)
.dropna(axis=1,how='all'))df的输出
id email1 value1 email2 value2
0 1 x@test.com 123.0 NaN NaN
1 2 y@test.com 456.0 NaN NaN
2 3 z@test.com 789.0 a@test.com 12.0https://stackoverflow.com/questions/68649212
复制相似问题