ホーム>source

私はこのようなパンダのデータフレームを持っています:


名前|姓|ハウスID

ジェームズ|ポッター| 12345

ハリー|ポッター| NaN

アナキン|スカイウォーカー| NaN

ルーク|スカイウォーカー| NaN


同じ姓を持つ行を検索して、House ID列の欠損値を入力したいと思います。ただし、上のSkywalkerファミリーのようにすべての行でこれを行うことはできません。したがって、結果は次のようになります。


名前|姓|ハウスID

ジェームズ|ポッター| 12345

ハリー|ポッター| 12345

アナキン|スカイウォーカー| NaN

ルーク|スカイウォーカー| NaN


インデックスの作成と形状の維持に混乱し、forループを使用せずに降下関数を記述できなかったため、処理が非常に遅くなりました。

あなたの答え
  • 解決した方法 # 1

    <前>ウィズウィズ df = pd.DataFrame({ 'Name': ['James', 'Harry', 'Anakin', 'Luke'], 'Lastname': ['Potter', 'Potter', 'Skywalker', 'Skywalker'], 'House ID': ['12345', np.nan, np.nan, np.nan] }) lookup_table = df[df['House ID'].notnull()][['Lastname', 'House ID']].drop_duplicates() similar_addresses = ( df[['Lastname', 'House ID']] .merge(lookup_table, how='left', on='Lastname', suffixes=['', '_same_last_name']) ['House ID_same_last_name'] ) df['House ID'] = df['House ID'].combine_first(similar_addresses) >>> df Name Lastname House ID 0 James Potter 12345 1 Harry Potter 12345 2 Anakin Skywalker NaN 3 Luke Skywalker NaN

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ Googleフォームで空のフィールドを文字列に置き換えます