パンダのデータフレーム内の欠損値を記入

アダムIqshan:

locationid、geo_loc:私は2つの列を持つパンダのデータフレームを持っています。locationid列は、欠損値をしています。

私は行方不明locationid行のgeo_loc値を取得したい、そしてgeo_loc列でこのgeo_loc値を検索し、loction 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が、私は、インデックス1に欠損値を埋めるためにしたい、この値では158をlocationidました。

私はこれらのコードを試してみましたが、彼らは仕事をdidntの。

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

値が文字列である場合であるトリックによって可能である-との欠損値を削除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

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=4649&siteId=1