python - 将数据帧放入基于一列的数据帧字典中

标签 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 列,并将 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填补任何空白。

最佳答案

使用set_indexunstack :

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

然后在字典理解中按 xsMultiIndex 第一级进行选择:

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

但也可以通过 xsdf1 生成输出不理解:

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/

相关文章:

python - 与 while 循环一样,如何跳过 for 循环中的一个步骤?

python - 我可以避免 pandas 合并中右侧数据框的连接列出现在输出中吗?

Python pandas 按多个索引范围切片数据框

python - 读取 excel 文件时将转换器应用于所有列,Python 3.6

r - 在返回多个值的 apply 函数中处理 NA 值

python - Discord.py 检查用户是否对特定表情符号使用react

python - 如何在 SQLAlchemy 中创建两个相互依赖的对象?

python - 如何在 Python 中使用 RE 将重复字符压缩为单个字符?

python - 如何在 Pandas 列中找到行索引?

r - 从一个 data.frame 中选择第二个 data.frame 中不存在的行