Python 如果存在相同的重复条目,如何填写列的NaN
我的数据框架中有两列,即LocationID和LocationName LocationID没有任何NAN条目。但是,某些行在LocationName列中具有NaN entires。每个位置名称都与唯一的LocationID关联 LocationID和LocationName列在dataframe中有许多重复的条目 如果数据帧中存在同一LocationID的数据点,且LocationName列中没有NaN,则如何填写与LocationID关联的LocationName列的NaN条目 示例如下所示:Python 如果存在相同的重复条目,如何填写列的NaN,python,pandas,duplicates,fillna,Python,Pandas,Duplicates,Fillna,我的数据框架中有两列,即LocationID和LocationName LocationID没有任何NAN条目。但是,某些行在LocationName列中具有NaN entires。每个位置名称都与唯一的LocationID关联 LocationID和LocationName列在dataframe中有许多重复的条目 如果数据帧中存在同一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
尝试:
可以获取一个序列,将每个索引映射到应用于填充缺失值的值
因此,我们需要收集一系列数据,将每个唯一的LocationID映射到LocationName:
df=df.set_index(“LocationID”)#以防它还不是索引
df=df.replace(“,np.nan)#如果缺少的值是空字符串而不是实际的nan
mapping=df[“LocationName”].dropna().drop_duplicates()
打印(映射)
产出:
LocationName
LocationID
1 Bengaluru
2 Delhi
3 Mysore
4 Nagpur
LocationID
1 Bengaluru
2 Delhi
3 Mysore
1 Bengaluru
1 Bengaluru
4 Nagpur
2 Delhi
2 Delhi
3 Mysore
现在,我们使用fillna()
将其应用于原始数据帧:
df[“LocationName”].fillna(映射,inplace=True)
打印(df)
产出:
LocationName
LocationID
1 Bengaluru
2 Delhi
3 Mysore
4 Nagpur
LocationID
1 Bengaluru
2 Delhi
3 Mysore
1 Bengaluru
1 Bengaluru
4 Nagpur
2 Delhi
2 Delhi
3 Mysore
如果LocationID不是您的索引,可以选择放回原始索引