アダム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