1
特定のインデックスのルックアップテーブルを使用して、一連の値を置き換えたいとします。たとえば:パンダ:インデックスの参照によってシリーズの値を置き換えます。
s1 = Series.(['keep', 'replace', 'replace'}, index=['p1', 'p2', 'p3'])
lookup = {'p2' : 'altered', 'p3' : 'changed'}
# desired series s1:
# p1 keep
# p2 altered
# p3 changed
確かに、私は辞書をループすることによってこれを行うことができますが、私は強くパンダで、より良い方法があると仮定します。
しかし、これはもっと複雑な作業の一歩です。私はパンダの最も読みやすい(そして効率的な)方法で以下のことを達成する方法を提案することに感謝します。
目的は、集約された情報を保持する列を計算することです。 は、例えば、私は、このようなデータフレームdf
を与えられています:
object color
0 o1 gr
1 o2 gr
2 o2 rd
3 o3 rd
4 1o None
5 2o None
6 3o None
オブジェクトは、例えば、いくつかの機能により類似であると考えられますreverse
(o1 == 1o
など)。 は最終的に、私はdf
に列colors
を追加したい:colors
は、各オブジェクトの色のセットを保持している
object color colors
0 o1 gr {gr}
1 o2 gr {rd, gr}
2 o2 rd {rd, gr}
3 o3 rd {rd}
4 1o None {gr}
5 2o None {rd, gr}
6 3o None {rd}
。 1o
、2o
およびの未知の色は、それらの兄弟から取得されます。
現在、私はこれらの手順をしています:
d = OrderedDict([('object', ['o1', 'o2', 'o2', 'o3', '1o', '2o', '3o']),\
('color', ['gr', 'gr', 'rd', 'rd', None, None, None])])
df = pd.DataFrame(d)
# 1. Group and aggregate the colors.
colors = df.groupby('object')['color'].apply(set)
# 2. Compute a lookup table
colored = df.ix[~pd.isnull(df['color']), 'object'].unique()
unknown = df.ix[pd.isnull(df['color']), 'object'].unique()
lookup = {obj[::-1] : colors[obj] for obj in colored}
# 3. Set colors of `1o`, ... (Initial Question!)
colors[colors.index.isin(lookup.keys())] = colors.index.to_series().map(lookup)
# 4. Add column `colors` original data frame
df['colors'] = df['object'].map(colors)
私は非常にあなたの第二のより複雑な部分を理解したがためにしていません最初に 's1 [s1.index.isin(lookup.keys())] = s1.index.to_series()。map(lookup)'を実行することができます。 – EdChum
この質問でも混乱します。おそらく、あなたはそれに言い換えてより具体的な例を提供するべきです。 – Alexander
@アレクサンダー:私は事をより明確にするために、この例を大幅に見直しました。 – user1722901