我有一个数据框,其值的分布有些不均匀-有些缺失,有些没有缺失。
数据如下:
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
相似的值-如果其中任何一个匹配,则应填充{ {1}}以前使用过。
输出如下所示:
Location
是否有一种简便的方法来像上面那样压缩此数据框?
答案 0 :(得分:0)
我只能提出这种缓慢的解决方案(两个apply
必须缓慢),为了获得高性能,请检查
github project
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