Создать новый столбец на основе старого столбца, используя словарь - PullRequest
0 голосов
/ 27 апреля 2018

Я видел некоторые сообщения, которые работают, когда словарь использует одно значение на ключ. Однако я хотел бы использовать словарь с несколькими значениями для каждого ключа.

myDict = {'0': ['a', 'b', 'c'], '1': ['e', 'f'], '2': ['z','x','y']}

Я хотел бы создать новый столбец, чтобы все a, b и c стали 0 и т. Д., В результате чего:

col1, col2
a, 0
f, 1
a, 0
x, 2
e, 1

На основании пары других ответов я попробовал это, но это не сработало: df['col2'] = df['col1'].apply(lambda x: a for a, b in myDict.items() if x in b)

Моя другая мысль состоит в том, чтобы просто создать словарь, подобный {'a':'0', 'b':'0'}, и отобразить его, но мне было любопытно более краткий способ, если мои списки были очень длинными (каждый ключ имел список из 30 значений). Или это лучший способ?

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Учитывая, что ваш col1 содержит только эти значения 'a', 'b', 'c', 'e' и т. Д.), Вы можете использовать следующее:

myDict = {'a':0, 'b':'0', 'c':'0', 'e':'1', 'f':'1', 'z':'2', 'x':'2', 'y':'2'}
df.col1.map(myDict)
0 голосов
/ 27 апреля 2018

Вы можете использовать понимание списка и ввести в pd.DataFrame. Это обычно более эффективно, чем манипулирование существующим фреймом данных.

import pandas as pd

d = {'0': ['a', 'b', 'c'], '1': ['e', 'f'], '2': ['z','x','y']}

df = pd.DataFrame([[w, k] for k, v in d.items() for w in v],
                  columns=['col1', 'col2'])

print(df)

  col1 col2
0    a    0
1    b    0
2    c    0
3    e    1
4    f    1
5    z    2
6    x    2
7    y    2
0 голосов
/ 27 апреля 2018

Давайте использовать Series с stack

pd.Series(myDict).apply(pd.Series).stack().reset_index(level=0)
Out[353]: 
  level_0  0
0       0  a
1       0  b
2       0  c
0       1  e
1       1  f
0       2  z
1       2  x
2       2  y

Обновлено

s=pd.Series(myDict).apply(pd.Series).stack().reset_index(level=0).set_index(0)['level_0']
s.get(df.col1)
Out[372]: 
col1
a    0
f    1
a    0
x    2
e    1
Name: level_0, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...