Pandas Complex Group通过并应用于机器学习数据集

时间:2019-09-24 13:02:03

标签: pandas numpy pandas-groupby apply

我有一个用于机器学习数据集的数据集。我的数据框在下面列出。

dataframe = df

      memid     year     code1     code2    ....... n amount of columns
        1       2014      8888      654
        2       2016      13456     4353
        2       2016      12345     3333
        1       2014      123333    1111 
        1       2016      55555     2222 
        1       2016      99999     2222 

我的目标是汇总数据集并将年份作为度量的列名称添加到整个数据框(即n列),我的目标是下面的表结构

下面的目标数据框:

 memid    code1_2014     code1_2015     code1_2016      code2_2014       code2_2015     code2_2016
   1      8888, 123333                  55555, 99999     654, 1111                          2222
   2                                    13456, 12345                                     4353, 3333                  

此代码的目标是为数据集中除memid之外的所有列实现以上列结构。我知道这是一个复杂的groupby和.apply或join方法,但是我无法达到目标。

请帮助! 谢谢!

2 个答案:

答案 0 :(得分:1)

如何?

grpd_vals = df.pivot_table(
    index='memid',
    columns='year',
    aggfunc=lambda x: ','.join(str(i) for i in x.values)
).unstack().to_frame().reset_index()

给予:

enter image description here

然后建立一列以保存新的列名:

grpd_vals['col'] = grpd_vals['level_0'] + '_'+grpd_vals['year'].astype(str)

然后再次分组:

grpd_vals.pivot_table(
    index='memid',
    columns='col',
    values=0,
    aggfunc=lambda x: x
)

哪个给:

enter image description here

答案 1 :(得分:0)

可能不如早期的那么简单,但这是我的尝试。

grouped = pd.DataFrame(df1.groupby(['memid','year']).aggregate(lambda x: list(x))) grouped.columns = ['_'.join(str(i)) for i in list(grouped.index.values)] grouped = grouped.reset_index(level= 1, drop=True) final = grouped.groupby(grouped.index).aggregate(lambda x: [item for sublist in x for item in sublist])