我有一个数据框,如下所示:
df=
column1 v1 v2 ... vN
ind1 'a' 1 3
ind1 'b' 2 4
ind2 'a' 3 5
ind2 'b' 4 6
...
indN 'c' 5 7
我想将此数据帧拆分为一个数据帧字典,每个数据帧对应原始 v1..vN
列,并将 columns1 中的可能值作为新列
例如。
output['v1']=
'a' 'b' 'c'
ind1 1 2 nan
ind2 3 4 nan
indN nan nan 5
output['v2']=
'a' 'b' 'c'
ind1 3 4 nan
ind2 5 6 nan
indN nan nan 7
并用nans
填补任何空白。
最佳答案
df1 = df.set_index('column1', append=True).unstack()
print (df1)
v1 v2
column1 'a' 'b' 'c' 'a' 'b' 'c'
ind1 1.0 2.0 NaN 3.0 4.0 NaN
ind2 3.0 4.0 NaN 5.0 6.0 NaN
indN NaN NaN 5.0 NaN NaN 7.0
然后在字典理解中按 xs
的 MultiIndex
第一级进行选择:
output = {x:df1.xs(x, axis=1) for x in df1.columns.levels[0]}
print (output)
{'v2': column1 'a' 'b' 'c'
ind1 3.0 4.0 NaN
ind2 5.0 6.0 NaN
indN NaN NaN 7.0, 'v1': column1 'a' 'b' 'c'
ind1 1.0 2.0 NaN
ind2 3.0 4.0 NaN
indN NaN NaN 5.0}
print (output['v1'])
column1 'a' 'b' 'c'
ind1 1.0 2.0 NaN
ind2 3.0 4.0 NaN
indN NaN NaN 5.0
但也可以通过 xs
从 df1
生成输出不理解:
print (df1.xs('v1', axis=1))
column1 'a' 'b' 'c'
ind1 1.0 2.0 NaN
ind2 3.0 4.0 NaN
indN NaN NaN 5.0
<小时/>
类似的解决方案:
df1 = df.set_index('column1', append=True)
print (df1)
v1 v2
column1
ind1 'a' 1 3
'b' 2 4
ind2 'a' 3 5
'b' 4 6
indN 'c' 5 7
output = {x:df1.unstack().xs(x, axis=1) for x in df1.columns}
print (output)
{'v2': column1 'a' 'b' 'c'
ind1 3.0 4.0 NaN
ind2 5.0 6.0 NaN
indN NaN NaN 7.0, 'v1': column1 'a' 'b' 'c'
ind1 1.0 2.0 NaN
ind2 3.0 4.0 NaN
indN NaN NaN 5.0}
print (output['v1'])
column1 'a' 'b' 'c'
ind1 1.0 2.0 NaN
ind2 3.0 4.0 NaN
indN NaN NaN 5.0
关于python - 将数据帧放入基于一列的数据帧字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48823986/