如果存在相同的重复条目,如何填充列的 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 不是您的索引,可选择放回原始索引。
我的数据框中有 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 不是您的索引,可选择放回原始索引。