Сопоставить значения из нескольких фреймов данных с несколькими значениями в Pandas - PullRequest
0 голосов
/ 28 мая 2018

Мне нужна помощь с небольшим хитрым картированием для меня.

Нетрудно отобразить одно чистое значение, но теперь у меня есть несколько значений в одной ячейке для отображения.Нет никакого правила, сколько значений может быть, но чаще всего это значение от 1 до 4.

Датафреймы выглядят так:

df:
flag   id
 1   [A],[D]
 2   [B]
 3   [D],[E]
 3   [B],[C]

df1:
id   col1     col2     col3
A     on        1      true
B     on        2      true
C     off       4      true
D     off       4      false
E     on        2      true

df2:
id   col1     col2     col3
A     on        1      true
B     on        2      true
C     off       4      true
D     off       4      false
E     on        2      true

df3:
id   col1     col2     col3
A     on        4      true
B     off       6      true
C     off       4      false
D     on        3      false
E     on        2      true

Мне нужно отобразить все три столбца (col1,col2, col3), поэтому я добавляю его в один столбец, и так оно и должно быть.

df1['Description'] = df1['col1'] + ', ' + df1['col2'] + ', ' + df1['col3']

И то же самое для df2 и df3.И зависит от столбца "флаг" из df, из которого я собираюсь взять этот фрейм данных, 1 из df1, 2 из d2 и 3 из df3.Теперь у меня проблемы со сложным кодированием, я начал с разделения на несколько строк (каждое значение в списке в df ['id']), затем отображения, большого количества групп и слияний, и есть большой шанс потерпеть неудачу вкакой-то момент.

Итак, если есть какой-то шаг, чтобы просто проанализировать и отобразить другой фрейм данных, не разбивая значения столбцов на несколько столбцов или строк?

Я пробовал что-то вроде этого:

for a in df['flag'].values:
    if a == '1':
        df['Description'] = df['id'].map(df1.set_index('id')['Description'])
    elif a == '2':
        df['Description'] = df['id'].map(df2.set_index('id')['Description'])
    elif a == '3':
        df['Description'] = df['id'].map(df3.set_index('id')['Description'])
    else:
        df['Description'] = 'No RAT data'

Но я получаю значения NaN.Желаемый результат:

flag   id        Description
 1   [A],[D]   (on, 1, true), (off, 4, false)
 2   [B]       (on, 2, true)
 3   [D],[E]   (on, 2, true), (on, 2, true)
 3   [B],[C]   (off, 6, true), (off, 4, false)

Любая помощь приветствуется.Заранее спасибо.

1 Ответ

0 голосов
/ 28 мая 2018

Сначала вы должны определить новый фрейм данных, например, запись

d = {'col1':[0,0,0,0,0],'col2':[0,0,0,0,0],'col3':[0,0,0,0,0]}
new_df = pd.DataFrame(d)
new_df['col1']=df1['col1']
new_df['col2']=df1['col2']
new_df['col3']=df1['col3']

отметьте его

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