Мне нужна помощь с небольшим хитрым картированием для меня.
Нетрудно отобразить одно чистое значение, но теперь у меня есть несколько значений в одной ячейке для отображения.Нет никакого правила, сколько значений может быть, но чаще всего это значение от 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)
Любая помощь приветствуется.Заранее спасибо.