5

非常に大きなデータフレーム (~1.7MM 行 x 6 列) があります。関連データの簡単な例は次のとおりです。

City        Borough

Brooklyn    Brooklyn
Astoria     Queens
Astoria     Unspecified
Ridgewood   Unspecified
Ridgewood   Queens

そのため、City 列の情報に基づいて「未指定」の値を入力しようとしています。したがって、たとえば、シティ リッジウッドは、あるインスタンスでは未指定の行政区に属していますが、データセットの他の場所では、行政区がクイーンズとして正しくリストされています。

既に Panda の fillna を調べましたが、私のニーズを満たしていないようです。np.where メソッドも検討しましたが、この状況でどのように機能するかわかりません。私はパンダにかなり慣れていませんが、マップ/適用機能が必要なのでしょうか? これはおそらく千通りの方法で実現できますが、データのサイズを考慮してクロールされないものを探します。

編集:次のコードを使用して、都市と自治区の間で最も多く発生する「ペア」を含む辞書を作成できました。

specified = data[['Borough','City']][data['Borough']!= 'Unspecified']
paired = specified.Borough.groupby(specified.City).max()
paired = paired.to_dict()

ペアになった dict は、市をキーとし、区を値として持ちます。最後のステップは、それをborough列に適用/マッピングすることです...どうすればいいですか?

4

1 に答える 1

3

1 つの方法を次に示します。

>>> d
         City      Borough
0   Brooklyn     Brooklyn
1    Astoria       Queens
2    Astoria  Unspecified
3  Ridgewood  Unspecified
4  Ridgewood       Queens
>>> realData = d[d.Borough != "Unspecified"]
>>> realData = pandas.Series(data=realData.Borough.values, index=realData.City)
>>> d['Borough'] = d.City.map(realData)
>>> d
         City   Borough
0   Brooklyn  Brooklyn
1    Astoria    Queens
2    Astoria    Queens
3  Ridgewood    Queens
4  Ridgewood    Queens

これは、すべての都市が未指定の自治区の値を 1 つだけ持っていることを前提としています。(都市に値がなく未指定の場合、行政区は NA として表示されます。)

編集:編集した投稿のように辞書を既に作成している場合は、を使用d['Borough'] = d.City.map(paired['Borough'])して各都市を辞書から自治区にマップします。 map知っておくと便利な方法です。Pandas シリーズ、辞書、またはキーを指定してマップされた値を返す関数を使用して、値をマップできます。

于 2012-11-19T00:54:59.203 に答える