Сначала примените np.array
, чтобы получить массивы, затем примените pd.Series
, чтобы в основном повернуть значения каждого столбца в строку, чтобы мы могли использовать стек для преобразования. После этого мы используем stack
и сохраняем NaN
.
В конце мы concat
все кадры данных до одного окончательного кадра данных по axis=1
cols = ['valueA', 'valueB']
dfs = []
for col in cols:
dfs.append(df.groupby('mIndex')[col].apply(np.array)
.apply(pd.Series)
.stack(dropna=False).reset_index(level=0)
.rename({0:col}, axis=1))
df_final = pd.concat(dfs, axis=1).reset_index(drop=True)
print(df_final)
mIndex valueA mIndex valueB
0 1 111.0 1 10.0
1 1 112.0 1 20.0
2 1 NaN 1 NaN
3 2 222.0 2 30.0
4 2 221.0 2 40.0
5 2 223.0 2 50.0
6 3 333.0 3 60.0
7 3 NaN 3 NaN
8 3 NaN 3 NaN
мы можем получить доступ к groupby
элементам
df= pd.concat([
d.reset_index(drop=True).reindex(range(3))
for n, d in df.groupby('mIndex')
], ignore_index=True)
print(df)
mIndex valueA valueB
0 1.0 111.0 10.0
1 1.0 112.0 20.0
2 NaN NaN NaN
3 2.0 222.0 30.0
4 2.0 221.0 40.0
5 2.0 223.0 50.0
6 3.0 333.0 60.0
7 NaN NaN NaN
8 NaN NaN NaN
Настольные приложения не имеют тех же проблемных веб-приложений, имеют в этом отношении. Они обычно заставляются работать на одной четко определенной платформе.
Это могло бы измениться в будущем. Вычисления перемещаются с рабочих столов на мобильные телефоны и ноутбуки меньшего размера. Настольные приложения должны будут работать на более широком множестве платформ в будущем. Это могло бы вызвать проблемы, потому что большинство платформ, которые мы используем для разработки настольных приложений, обрабатывает это еще хуже, чем платформа для веб-приложений.
В приложении и области операционной системы (OS), обычно инвертируется проблема. Это - ОС, которая обрабатывает всю сложность поддержания совместимости. С другой стороны, приложение обычно диктует минимальную версию ОС.
Другое место, где приложения начинают видеть эту проблему, является миром Java и до меньшего градуса весь другой так называемый сценарий langages что работа над много ОС.
Я не могу вообразить настольное приложение, стоящее перед таким различием в операционной среде.
Настольные приложения должны иметь дело с различием, только другого вида. Видеокарты в играх являются хорошим примером этого: Вы хотите достойную поддержку основных клиентов, но Ваш высокопроизводительный клиент с новейшей видеокартой захочет выполнение за их деньги. При вводе области обработки на GPU и управления памятью на карте у Вас будет причина достаточно для проклятия различия в операционных средах.
Вы также обычно имеете дело с большим количеством процессора и интенсивно использующего память программного обеспечения, чем веб-приложение, таким образом, необходимо будет принять это во внимание также. И я даже не говорю об удобстве использования меж-ОС (который многие дескриптор программного обеспечения, установленного на компьютере очень корректно).
Конечно, ничто не сохраняет издателя программного обеспечения, установленного на компьютере для наложения строгих критериев на среду. Это - просто вопрос бизнеса. Но ничто не вынуждает Вас поддерживать неосновные браузеры любой (и большинство веб-приложений действительно поддерживает Lynx?!?).