首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态地从column1获取值并将其分配给同一列中的NaN值,如果它们都具有相同的column2值

动态地从column1获取值并将其分配给同一列中的NaN值,如果它们都具有相同的column2值
EN

Stack Overflow用户
提问于 2020-08-17 20:04:01
回答 1查看 35关注 0票数 2

我有一个看起来像这样的DataFrame:

代码语言:javascript
复制
      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行是唯一的。

最终产品应该如下所示:

代码语言:javascript
复制
      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个不同的TYPE2ID值,因此手动建立它们就像df.loc[df["ID"]="12345678", "TYPE2"] = "B-5"无法工作一样。

如何让df.loc检查ID是否是相同的,然后从TYPE2中获取非空值并将其放入其他的ID行?还有其他方法来获得同样的结果吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-17 20:09:30

要在每个ID中填充空值,首先必须使用.groupby,然后将.bfill().ffill()组合起来

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63457877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档