我有一个看起来像这样的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我希望获得所有ID与非TYPE2值相同的NaN列。我们可以假设:
每个ID只有一个value.
TYPE2行是唯一的。最终产品应该如下所示:
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相同的情况下才能填充的条件。大约有1,500,000个不同的TYPE2和ID值,因此手动建立它们就像df.loc[df["ID"]="12345678", "TYPE2"] = "B-5"无法工作一样。
如何让df.loc检查ID是否是相同的,然后从TYPE2中获取非空值并将其放入其他的ID行?还有其他方法来获得同样的结果吗?
发布于 2020-08-17 20:09:30
要在每个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-3https://stackoverflow.com/questions/63457877
复制相似问题