Предположим, у меня есть следующий df:
df=pd.DataFrame({'g1':['a','b','c'],
'g2':['x','y','z'],
'val':[1,2,3]})
df
g1 g2 val
a x 1
b y 2
c z 3
чей «первичный ключ» (здесь используется жаргон SQL) - g1
и g2
.
Как развернуть фрейм данных таким образом, чтобы в нем была строка для каждой комбинации существующих значений в g1
и g2
. Для добавляемых строк лучше оставить np.nan под столбцом val. Таким образом, результат будет выглядеть следующим образом:
g1 g2 val
a x 1.0
a y NaN
a z NaN
b x NaN
b y 2.0
b z NaN
c x NaN
c y NaN
c z 3.0
В настоящее время я делаю следующее, но я уверен, что это не лучшее решение:
df.set_index(['g1','g2']).T.stack().unstack().T.reset_index()
Я также могу выполнять слияния, но когда количество ключей велико, код выглядит громоздким.