繁体   English   中英

填充熊猫数据框中的缺失值

[英]Fill missing values in pandas dataframe

我有一个包含两列的 Pandas 数据框:locationid、geo_loc。 locationid 列有缺失值。

我想获取丢失的 locationid 行的 geo_loc 值,然后在 geo_loc 列中搜索此 geo_loc 值并获取位置 id。

df1 = pd.DataFrame({'locationid':[111, np.nan, 145, np.nan, 189,np.nan, 158, 145],
                     'geo_loc':['G12','K11','B16','G12','B22','B16', 'K11',he l 'B16']})
df

在此处输入图片说明

我需要这样的最终输出:

在此处输入图片说明

locationid 的索引 1 缺失,对应的 geo_loc 值为“K11”。 我会在 geo_loc 列中查看这个“K11”,索引 6 的 locationid 为 158。我想用这个值填充索引 1 中的缺失值。

我尝试了这些代码,但它们不起作用。

df1['locationid'] = df1.locationid.fillna(df1.groupby('geo_loc')['locationid'].max())
df1['locationid'] = df1.locationid.fillna(df1.groupby('geo_loc').apply(lambda x: print(list(x.locationid)[0])))

GroupBy.transform用于与由聚合值max填充的原始大小相同的系列:

df1['locationid']=df1.locationid.fillna(df1.groupby('geo_loc')['locationid'].transform('max'))
print (df1)
   locationid geo_loc
0       111.0     G12
1       158.0     K11
2       145.0     B16
3       111.0     G12
4       189.0     B22
5       145.0     B16
6       158.0     K11
7       145.0     B16

如果值是字符串可以通过技巧 - 在 lambda 函数中使用Series.dropna删除缺失值, Series.dropna字典顺序比较字符串:

df1 = pd.DataFrame({'locationid':[111, np.nan, 145, np.nan, 189,np.nan, 158, 145],
                     'geo_loc':['G12','K11','B16','G12','B22','B16', 'K11', 'B16']})

#sample data strings with missing values
df1['locationid'] = df1['locationid'].dropna().astype(str) + 'a'


df1['locationid']= (df1.groupby('geo_loc')['locationid']
                       .transform(lambda x: x.fillna(x.dropna().max())))

print (df1)
  locationid geo_loc
0     111.0a     G12
1     158.0a     K11
2     145.0a     B16
3     111.0a     G12
4     189.0a     B22
5     145.0a     B16
6     158.0a     K11
7     145.0a     B16

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM