Python 基于一列将dataframe转换为dataframes字典

Python 基于一列将dataframe转换为dataframes字典,python,pandas,dataframe,pivot-table,pandas-groupby,Python,Pandas,Dataframe,Pivot Table,Pandas Groupby,我有一个如下所示的数据框: 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列对应一个数据帧字典,并将列1中的可能值作为新列 前 并用nans填补任何空白。与

我有一个如下所示的数据框:

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
列对应一个数据帧字典,并将列1中的可能值作为新列

并用
nans
填补任何空白。

与以下内容一起使用:

然后在听写理解中,通过第一级
多索引选择:

但也可以通过以下方式从
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
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
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