:
df['coutry'] = pd.factorize(df.coutry)[0] + 1
df['flag'] = pd.factorize(df.flag)[0] + 1
print (df)
coutry flag
0 1 1
1 2 2
2 1 3
3 3 3
4 2 2
メモリを節約する必要がある場合は、次にあなたがCategorical
によってcategories
に列を変換することができます:
df['coutry'] = pd.Categorical(pd.factorize(df.coutry)[0] + 1)
df['flag'] = pd.Categorical(pd.factorize(df.flag)[0] + 1)
print (df)
coutry flag
0 1 1
1 2 2
2 1 3
3 3 3
4 2 2
print (df.dtypes)
coutry category
flag category
dtype: object
#1000 times larger df
df = pd.concat([df]*1000).reset_index(drop=True)
df['coutry'] = pd.Categorical(pd.factorize(df.coutry)[0] + 1)
df['flag'] = pd.factorize(df.flag)[0] + 1
print (df)
coutry flag
0 1 1
1 2 2
2 1 3
3 3 3
4 2 2
5 1 1
6 2 2
...
...
print (df['coutry'].nbytes)
5024
print (df['flag'].nbytes)
20000
バック変換する必要がある場合、あなたはmap
値辞書によって:
b = [list(x) for x in pd.factorize(df.coutry.drop_duplicates())]
d1 = dict(zip(b[0], b[1]))
print (d1)
{0: 'China', 1: 'Russia', 2: 'Britain'}
b = [list(x) for x in pd.factorize(df.flag.drop_duplicates())]
d2 = dict(zip(b[0], b[1]))
print (d2)
{0: 'red', 1: 'green', 2: 'yellow'}
df['coutry'] = pd.Categorical(pd.factorize(df.coutry)[0])
df['flag'] = pd.Categorical(pd.factorize(df.flag)[0])
print (df)
coutry flag
0 0 0
1 1 1
2 0 2
3 2 2
4 1 1
df['coutry'] = df.coutry.map(d1)
df['flag'] = df.flag.map(d2)
print (df)
coutry flag
0 China red
1 Russia green
2 China yellow
3 Britain yellow
4 Russia green
私は結果データフレームを得たとき、私は、qustionを持っているが、私に時間をください与える元のデータフレーム – Chauncey
に復帰する方法はあります。 – jezrael
解決策を追加します。確認してください。 – jezrael