我有一个数据框,其中包含一些不均匀的值分布-一些缺失和一些缺失。
数据如下所示:
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 = Unit2
和Mover1 = Mover2
时填充和合并数据框,但要单独保留已经匹配的部分-Toshi
值。第二个需求是让Location
值填充与Name
,ID
和Utility
相似的值-如果这些值中的任何一个匹配,则应填充先前使用的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/