【问题标题】:Pandas - group by column and transform the data to numpy arrayPandas - 按列分组并将数据转换为 numpy 数组
【发布时间】:2019-03-08 08:34:03
【问题描述】:

有如下数据框,A组有4个样本,B有3个样本,C有1个样本:

  group   data_1   data_2
0     A        1        4
1     A        2        5
2     A        3        6
3     A        4        7
4     B        1        4
5     B        2        5
6     B        3        6
7     C        1        4

我想将数据转换为 numpy 数组,其中每一行是一个包含所有样本的组,对于样本较少的组,填充零。

产生这样的数组:

[
   [[1,4],[2,5],[3,6],[4,7]], # this is A group 4 samples
   [[1,4],[2,5],[3,6],[0,0]], # this is B group 3 samples
   [[1,4],[0,0],[0,0],[0,0]], # this is C group 1 sample
]

【问题讨论】:

    标签: python pandas pivot grouping


    【解决方案1】:

    首先是必要的添加缺失值 - 第一个解决方案unstack和stack,计数器系列由cumcount。

    第二个解决方案使用reindex by MultiIndex。

    最后使用lambda函数groupby,转换为numpy数组by values和最后列出:

    g = df.groupby('group').cumcount()
    L = (df.set_index(['group',g])
           .unstack(fill_value=0)
           .stack().groupby(level=0)
           .apply(lambda x: x.values.tolist())
           .tolist())
    print (L)
    
    [[[1, 4], [2, 5], [3, 6], [4, 7]], 
     [[1, 4], [2, 5], [3, 6], [0, 0]], 
     [[1, 4], [0, 0], [0, 0], [0, 0]]]
    

    另一种解决方案:

    g = df.groupby('group').cumcount()
    mux = pd.MultiIndex.from_product([df['group'].unique(), g.unique()])
    L = (df.set_index(['group',g])
           .reindex(mux, fill_value=0)
           .groupby(level=0)['data_1','data_2']
           .apply(lambda x: x.values.tolist())
           .tolist()
    )
    

    【讨论】:

    • 谢谢你的回复,但我收到一个错误keyerror:“找不到列:'data_2','data_1' span>
    • @ shlomischwartz - 什么是print (df.columns.tolist())? span>
    • 。stack()。groupby(level = 0)['data_1','data_2']导致错误,然后在该行看起来如此,如此,df看起来如此`data_1 data_2 0 1 2 3 0 1 2 3组1 2 3 4 4 5 6 7 B 1 2 3 0 4 5 6 0 C 1 0 0 0 4 0 0 0` span>
    • @ shlomischwartz - 我检查edit,但不幸的是,我没有experie练习:(所以我升空突出你的问题。 span>
    • @ saketkumarsingh - 尝试删除.reindex(mux, fill_value=0) span>
    猜你喜欢
    • 2015-12-04
    • 2020-06-20
    • 1970-01-01
    • 2018-01-01
    • 2015-04-30
    • 2022-01-12
    • 2019-10-30
    • 2016-03-31
    相关资源
    最近更新 更多