が唯一の 'A' とコルのための全体マップを渡すと、 'B' の値は、効率的ではありません。最初にどの値がdf colであるかを確認します。次に、ここでのように、唯一の彼らのためにマップ:可能ザッツ
>>> cols = ['one', 'two'];
>>> map = { 'a' : 'd', 'b' : 'c', 'c' : 'b', 'd' : 'a'};
>>> for col in cols:
... colSet = set(df[col].values);
... colMap = {k:v for k,v in map.items() if k in colSet};
... df.replace(to_replace={col:colMap},inplace=True);#not efficient like rly
...
>>> df
one three two
0 d a b
1 c d a
2 d a b
3 c d a
4 d a b
5 c d a
6 d a b
7 c d a
8 d a b
9 c d a
>>>
#OR
In [12]: %%timeit
...: for col in cols:
...: colSet = set(df[col].values);
...: colMap = {k:v for k,v in map.items() if k in colSet};
...: df[col].map(colMap)
...:
...:
1 loop, best of 3: 1.93 s per loop
#OR WHEN INPLACE
In [8]: %%timeit
...: for col in cols:
...: colSet = set(df[col].values);
...: colMap = {k:v for k,v in map.items() if k in colSet};
...: df[col]=df[col].map(colMap)
...:
...:
1 loop, best of 3: 2.18 s per loop
を過ぎる:
df = pd.DataFrame({'one':['a' , 'b']*5, 'two':['c' , 'd']*5, 'three':['a' , 'd']*5})
map = { 'a' : 'd', 'b' : 'c', 'c' : 'b', 'd' : 'a'}
cols = ['one','two']
def func(s):
if s.name in cols:
s=s.map(map)
return s
print df.apply(func)
はまた、キー(すなわちの重複を見てあなたは、並列に変更したい場合はBとBにに言うことができます。 Cが、好きではない、A-> B-> C)...
>>> cols = ['one', 'two'];
>>> map = { 'a' : 'd', 'b' : 'c', 'c' : 'b', 'd' : 'a'};
>>> mapCols = {k:map for k in cols};
>>> df.replace(to_replace=mapCols,inplace=True);
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "Q:\Miniconda3\envs\py27a\lib\site-packages\pandas\core\generic.py", line 3352, in replace
raise ValueError("Replacement not allowed with "
ValueError: Replacement not allowed with overlapping keys and values
['df.replace'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html)? – DeepSpace