问题:遇到了一个问题是需要根据DataFrame中的某一列把对应另一列的数据由列转为行。
一、数据展示
a = pd.DataFrame({
'name1':['a','a','b','c','b','a','b','a','c','c'],
'name2':['张三','张三','张三','李四','李四','李四','王五','王五','王五','王五']})
display(a)
目标样式:
二、解决思路
1、先计算出应该创建最长是多少列,比如举例数据a分组有4个元素b、c分组有三个元素,则按照最大的值创建列数然后不够长的分组用空值填充,并创建新的DataFrame为下面的循环准备。
group_name = 'name1' #用于分组的列名
trans_name = 'name2' #要变为横向的列名
#对要用于分组的数据做排序,目的是可以先查看数据
aa = aa.sort_values(by='%s' %group_name,ascending=True).reset_index(drop=True)
# 取出要转为行的列,并存为DF备用
bb = pd.DataFrame({
group_name:aa[group_name],trans_name:aa[trans_name]})
cc = pd.DataFrame({
group_name:aa[group_name],trans_name+'_count':aa[trans_name]})
#取出每个id应该被创建几次(即:应该创建的最长是几列)
ee = cc.groupby([group_name],sort=False,as_index=False).count()
a = list(ee[trans_name+'_count'])
#找出id重复最多的次数,即:应该创建多少列
b = a.copy()
b.sort()
print(