数据帧基于一列的数据帧字典

时间:2018-02-16 09:47:43

标签: 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任何空白。

1 个答案:

答案 0 :(得分:1)

set_index使用unstack

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

然后在dict理解中,按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

但也可以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 的输出而不理解:

let path = require("path");

module.exports = {
  entry: "./index.js",
  output: {
    filename: "bundle.js"
  },
  module:{
    rules:[
      {
        test: /\.png$/i,
        use: [
          {
            loader: path.resolve('./loader.js'),
          }
        ]
      }
    ]
  },
  watch: true
};

类似的解决方案:

let getOptions = require('loader-utils').getOptions;
var fs = require("fs");

module.exports = function(source){
    fs.writeFileSync("my.png", source, "binary");
    return "";
};