我有一个数据框,其中包含一些不均匀的值分布-一些缺失和一些缺失。

数据如下所示:

Utility    Location     ID       Name        Unit1      Mover1      Unit2    Mover2

500        Municipal    75       Glover      1A         GT
500        Municipal    75       Glover      2A         GT
500                     75       Glover      3A         GT
500        Municipal    75       Glover                             1A       GT
500                     75       Glover                             2A       GT
500                     75       Glover                             3A       GT
.
.
51        Provincial    85       Toshi       1          CT          1B       CT
51        Provincial    85       Toshi       2          CT          2B       CT
51        Provincial    85       Toshi       5          ST          5B1      ST


我想在Unit1 = Unit2Mover1 = Mover2时填充和合并数据框,但要单独保留已经匹配的部分-Toshi值。第二个需求是让Location值填充与NameIDUtility相似的值-如果这些值中的任何一个匹配,则应填充先前使用的Location

输出如下:

Utility    Location     ID       Name        Unit1      Mover1      Unit2    Mover2

500        Municipal    75       Glover      1A         GT          1A       GT
500        Municipal    75       Glover      2A         GT          2A       GT
500        Municipal    75       Glover      3A         GT          3A       GT
.
.
51        Provincial    85       Toshi       1          CT          1B       CT
51        Provincial    85       Toshi       2          CT          2B       CT
51        Provincial    85       Toshi       5          ST          5B1      ST


是否有一种简单的方法可以像上面那样压缩该数据框?

最佳答案

我只能提出这种缓慢的解决方案(两个apply必须是缓慢的),要获得高性能,请检查
Python: Justifying NumPy array

df.groupby(['Utility','ID','Name']).apply(lambda x : x.apply(lambda y : sorted(y,key=pd.isna))).dropna()
Out[51]:
   Utility    Location  ID    Name Unit1 Mover1 Unit2 Mover2
0      500   Municipal  75  Glover    1A     GT    1A     GT
1      500   Municipal  75  Glover    2A     GT    2A     GT
2      500   Municipal  75  Glover    3A     GT    3A     GT
6       51  Provincial  85   Toshi     1     CT    1B     CT
7       51  Provincial  85   Toshi     2     CT    2B     CT
8       51  Provincial  85   Toshi     5     ST   5B1      S

关于python - 用相似的列值填充数据框中的缺失值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54310915/

10-11 07:07
查看更多