首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果存在相同的重复项,如何填充列的NaN

如果存在相同的重复项,如何填充列的NaN
EN

Stack Overflow用户
提问于 2021-01-06 10:53:54
回答 3查看 261关注 0票数 0

我的数据中有2列,即LocationID和LocationName。

LocationID没有任何NAN条目。但是,有些行在NaN列中有LocationName实体。每个位置名称都与唯一的LocationID相关联。

LocationID和LocationName列在dataframe中有许多重复条目。

如果与NaN列关联的LocationName列中存在数据点,则如何填充LocationName列中与LocationName列关联的LocationID的数据点。

一个样本看起来如下:

代码语言:javascript
复制
LocationID  LocationName
1   Bengaluru
2   Delhi
3   Mysore
1   
1   
4   Nagpur
2   
2   Delhi
3   Mysore
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-06 11:54:55

The Pandas function fillna()可以将每个索引映射到用于填充缺失值的值。

因此,我们需要收集一个系列,将每个唯一的LocationID映射到一个LocationName:

代码语言:javascript
复制
df = df.set_index("LocationID")  # in case it wasn't already the index
df = df.replace("", np.nan)  # in case your missing values are empty strings instead of actual NaNs

mapping = df["LocationName"].dropna().drop_duplicates()
print(mapping)

产出:

代码语言:javascript
复制
           LocationName
LocationID             
1             Bengaluru
2                 Delhi
3                Mysore
4                Nagpur

现在,我们使用fillna()将其应用于原始数据

代码语言:javascript
复制
df["LocationName"].fillna(mapping, inplace=True)
print(df)

产出:

代码语言:javascript
复制
LocationID             
1             Bengaluru
2                 Delhi
3                Mysore
1             Bengaluru
1             Bengaluru
4                Nagpur
2                 Delhi
2                 Delhi
3                Mysore

如果LocationID已经不是您的索引,则可以选择地将原始索引放回。

票数 1
EN

Stack Overflow用户

发布于 2021-01-06 11:37:38

下面应该能够实现你想要做的事情:

代码语言:javascript
复制
df = pd.DataFrame([[1 , 'Bengaluru'], [2, 'Delhi'], [1, np.nan], [3, 'Mysore'], [2, 'Delhi']], columns=['LocationID', 'LocationName']) 
look_up_df = df[df.LocationName.notnull()].drop_duplicates(['LocationID']) 
look_up_df = look_up_df.set_index('LocationID')['LocationName']
df['LocationName'] = df['LocationName'].fillna(df['LocationID'].map(look_up_df)) 

输入:

代码语言:javascript
复制
    LocationID  LocationName
0   1   Bengaluru
1   2   Delhi
2   1   NaN
3   3   Mysore
4   2   Delhi

Output:

    LocationID  LocationName
0   1   Bengaluru
1   2   Delhi
2   1   Bengaluru
3   3   Mysore
4   2   Delhi
票数 0
EN

Stack Overflow用户

发布于 2021-01-06 11:54:52

尝试:

代码语言:javascript
复制
df=pd.DataFrame({'LocationID':[1,2,3,1,1,4,2,2,3],'LocationName':['Bangalore','Delhi','Mysore',np.nan,np.nan,'Nagpur',np.nan,'Delhi','Mysore']})
df=df.set_index(df['LocationID'])
df['LocationName']=[df['LocationName'][df['LocationID']==i].dropna().drop_duplicates().values[0] for i in df['LocationID']]
df=df.reset_index(drop=True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65594437

复制
相关文章

相似问题

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