我的数据中有2列,即LocationID和LocationName。
LocationID没有任何NAN条目。但是,有些行在NaN列中有LocationName实体。每个位置名称都与唯一的LocationID相关联。
LocationID和LocationName列在dataframe中有许多重复条目。
如果与NaN列关联的LocationName列中存在数据点,则如何填充LocationName列中与LocationName列关联的LocationID的数据点。
一个样本看起来如下:
LocationID LocationName
1 Bengaluru
2 Delhi
3 Mysore
1
1
4 Nagpur
2
2 Delhi
3 Mysore发布于 2021-01-06 11:54:55
The Pandas function fillna()可以将每个索引映射到用于填充缺失值的值。
因此,我们需要收集一个系列,将每个唯一的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已经不是您的索引,则可以选择地将原始索引放回。
发布于 2021-01-06 11:37:38
下面应该能够实现你想要做的事情:
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发布于 2021-01-06 11:54:52
尝试:
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)https://stackoverflow.com/questions/65594437
复制相似问题