Es scheint, Sie brauchen reset_index
mit pivot
:
df = df.reset_index().pivot(index='index', columns='Q', values='A')
print (df)
Q a b c d
index
A h i j None
B l m None k
C None None n None
Und dann, wenn nötig reindex_axis
und replace
:
cols = list('abcdefg')
print (df.reindex_axis(cols, axis=1).replace({None:np.nan}))
Q a b c d e f g
index
A h i j NaN NaN NaN NaN
B l m NaN k NaN NaN NaN
C NaN NaN n NaN NaN NaN NaN
EDIT:
Wenn Duplikate in Daten besser groupby
mit join
ist:
print (df)
Q A
A a h
A b i
A c j
B d k
B a l
B b m <-duplicates B b
B b t <-duplicates B b
C c n
df = df.reset_index().groupby(['index','Q'])['A'].apply(','.join).unstack()
print (df)
Q a b c d
index
A h i j None
B l m,t None k
C None None n None
Eine andere mögliche Lösung mit pivot_table
:
#aggfunc='first' - get only first value, another values are lost
df1 = df.reset_index().pivot_table(index='index', columns='Q', values='A', aggfunc='first')
print (df1)
Q a b c d
index
A h i j None
B l m None k
C None None n None
Q a b c d
#aggfunc='sum' - summed data, no separator
df2 = df.reset_index().pivot_table(index='index', columns='Q', values='A', aggfunc='sum')
print (df2)
index
A h i j None
B l mt None k
C None None n None
Q a b c d
#aggfunc=','.join - summed data with separator
df3 = df.reset_index().pivot_table(index='index', columns='Q', values='A', aggfunc=','.join)
print (df3)
index
A h i j None
B l m,t None k
C None None n None