如果存在相同的重复条目,如何填充列的 NaN

How to fill NaN of a column if the same duplicated entry exists

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

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

LocationID 和 LocationName 列在数据框中有很多重复条目。

如果数据框中存在相同 LocationID 的数据点,而 LocationName 列中没有 NaN,我该如何填充与 LocationID 关联的 LocationName 列的 NaN 条目。

示例如下所示:

LocationID  LocationName
1   Bengaluru
2   Delhi
3   Mysore
1   
1   
4   Nagpur
2   
2   Delhi
3   Mysore

下面应该可以实现你想要做的事情:

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)) 

输入:

    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

尝试:

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)

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

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

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)

输出:

           LocationName
LocationID             
1             Bengaluru
2                 Delhi
3                Mysore
4                Nagpur

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

df["LocationName"].fillna(mapping, inplace=True)
print(df)

输出:

LocationID             
1             Bengaluru
2                 Delhi
3                Mysore
1             Bengaluru
1             Bengaluru
4                Nagpur
2                 Delhi
2                 Delhi
3                Mysore

如果 LocationID 不是您的索引,可选择放回原始索引。