Как соединить датафрейм и словарь в две строки - PullRequest
0 голосов
/ 27 мая 2019

У меня есть словарь и датафрейм. Словарь содержит сопоставление одной буквы одному номеру, а в кадре данных есть строка, содержащая эти конкретные буквы, и другая строка, содержащая эти конкретные цифры, смежные друг с другом (хотя это не обязательно имеет значение).

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

df = pd.DataFrame(np.array([[4, 5, 6], ['a', 'b', 'c'], [7, 8, 9]]))

dict = {'a':2, 'b':3, 'c':5}

Предположим, что dict - это словарь, а df - это фрейм данных. Я хочу, чтобы результатом был df2.

df2 = pd.DataFrame(np.array([[3, 2, 5], ['b', 'a', 'c'], [7, 8, 9]]))

DF

   0  1  2
0  4  5  6
1  a  b  c
2  7  8  9

ДИКТ

{'a': 2, 'b': 3, 'c': 5}

df2

   0  1  2
0  2  3  5
1  a  b  c
2  7  8  9

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

1 Ответ

1 голос
/ 27 мая 2019

Это немного странно, но:

df = pd.DataFrame(np.array([[4, 5, 6], ['a', 'b', 'c'], [7, 8, 9]]))
d = {'a': 2, 'b': 3, 'c': 5}
df.iloc[0] = df.iloc[1].map(lambda x: d[x] if x in d.keys() else x)

df
#    0  1  2
# 0  2  3  5
# 1  a  b  c
# 2  7  8  9

Я не мог заставить себя переопределить dict как особый словарь.: D

После получения заслуженного удара о скорости apply, я представляю вам теоретически более быстрый подход ниже:

df.iloc[0] = df.iloc[1].map(d).where(df.iloc[1].isin(d.keys()), df.iloc[0])

Это дает вам словарное значение d(df.iloc[1].map(d)), если значение в строке 1 указано в ключах d (.where(df.iloc[1].isin(d.keys()), ...), в противном случае вы получите значение в строке 0 (...df.iloc[0])).

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...