我有一个看起来像这样的DataFrame:
ID DESCRIPTION TYPE1 TYPE2
12345678 EXAMPLENAME1 874.4 NaN
12345678 EXAMPLENAME2 854.4 NaN
12345678 EXAMPLENAME3 874.4 B-5
78978999 EXAMPLENAME2 788.8 B-9
78978999 EXAMPLENAME4 978.2 NaN
78978999 EXAMPLENAME1 288.3 NaN
92124566 EXAMPLENAME3 369.1 NaN
92124566 EXAMPLENAME3 289.1 B-3
92124566 EXAMPLENAME3 959.1 NaN
我想获取所有TYPE2
具有相同ID且值不为的列NaN
。我们可以假设:
TYPE2
每个ID 仅一行有一个非空值。TYPE2
每个ID唯一。最终产品应如下所示:
ID DESCRIPTION TYPE1 TYPE2
12345678 EXAMPLENAME1 874.4 B-5
12345678 EXAMPLENAME2 854.4 B-5
12345678 EXAMPLENAME3 874.4 B-5
78978999 EXAMPLENAME2 788.8 B-9
78978999 EXAMPLENAME4 978.2 B-9
78978999 EXAMPLENAME1 288.3 B-9
92124566 EXAMPLENAME3 369.1 B-3
92124566 EXAMPLENAME3 289.1 B-3
92124566 EXAMPLENAME3 959.1 B-3
我尝试使用ffill
,但仅在ID相同时无法建立填充条件。有150万左右的不同TYPE2
和ID
价值观,所以手动建立它们就像df.loc[df["ID"]="12345678", "TYPE2"] = "B-5"
是行不通的。
我如何df.loc
检查是否ID
相同,然后从中获取非空值TYPE2
并将其关联到其余ID
行?还有其他方法可以得到相同的结果吗?
要在每个ID中填充空值,我们必须首先使用.groupby
然后组合.bfill()
和.ffill()
df['TYPE2'] = df.groupby('ID')['TYPE2'].bfill().ffill()
#result
ID DESCRIPTION TYPE1 TYPE2
0 12345678 EXAMPLENAME1 874.4 B-5
1 12345678 EXAMPLENAME2 854.4 B-5
2 12345678 EXAMPLENAME3 874.4 B-5
3 78978999 EXAMPLENAME2 788.8 B-9
4 78978999 EXAMPLENAME4 978.2 B-9
5 78978999 EXAMPLENAME1 288.3 B-9
6 92124566 EXAMPLENAME3 369.1 B-3
7 92124566 EXAMPLENAME3 289.1 B-3
8 92124566 EXAMPLENAME3 959.1 B-3
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句