【问题标题】:Filling missing values in dataframe with similar column values Python用相似的列值Python填充数据框中的缺失值
【发布时间】:2019-06-16 01:54:34
【问题描述】:

我有一个数据框,其中一些值分布不均 - 有些缺失,有些没有缺失。

数据如下:

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

有没有像上面一样压缩这个数据框的简单方法?

【问题讨论】:

    标签: python python-3.x pandas dataframe replace


    【解决方案1】:

    我只能想出这个慢的解决方案(两个applys一定很慢),高性能请检查 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-26
      • 2018-12-17
      • 2018-07-25
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多