我有一个用于机器学习数据集的数据集。我的数据框在下面列出。
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方法,但是我无法达到目标。
请帮助! 谢谢!
答案 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()
给予:
然后建立一列以保存新的列名:
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
)
哪个给:
答案 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])