Python 如何将一列的值转换为列标题,将其他列的值转换为行?
这就是我的df的样子Python 如何将一列的值转换为列标题,将其他列的值转换为行?,python,pandas,dataframe,Python,Pandas,Dataframe,这就是我的df的样子 A B C D E F xyz abc aa 100 qq brc,pqr,lmn xyz abc bb 150 qq lmn,brc,ppq xyz abc cc 80 qq lmn,pqr abc pqr cc 99 qq pqr,brc,lmn abc
A B C D E F
xyz abc aa 100 qq brc,pqr,lmn
xyz abc bb 150 qq lmn,brc,ppq
xyz abc cc 80 qq lmn,pqr
abc pqr cc 99 qq pqr,brc,lmn
abc pqr aa 180 qq brc,lmn,pqr
abc pqr bb 200 qq lmn,pqr,brc
这就是我想要的。我怎样才能达到同样的效果
A B aa bb cc E F
xyz abc 100 150 80 qq brc,pqr,lmn,ppq
abc pqr 180 200 99 qq brc,lmn,pqr
用于由以下人员创建的另一个数据帧:
感谢您的回复,但我得到的错误是“没有要聚合的数值类型”,因为数据类型是字符串值。我能做些什么?@Prachi-你可以使用
df.D=df.D.astype('int')
或者从pd.到_numeric
的其他解决方案好的,我做到了。但是我的输出看起来不像我想要的。实际上,我得到了两次列'cc',值也分开了。我尝试了df.groupby(df.columns,axis=1).first(),但它也不起作用。@Prachi-没有一些空格像列是'cc'
和'cc'
?在我的解决方案之后,print(df.columns.tolist())
是什么?@Prachi-谢谢,所以问题是cc
有空间,所以需要在我的解决方案之前df.C=df.C.str.strip()
将'cc'
转换为'cc'
f = lambda x: ','.join(set(z for y in x for z in y.split(',')))
df1 = df.groupby(['A','B']).agg({'E':'first', 'F': f})
df = df.pivot_table(index=['A','B'],
columns='C',
values='D',
aggfunc='mean').join(df1).reset_index()
print (df)
A B aa bb cc E F
0 abc pqr 180 200 99 qq lmn,brc,pqr
1 xyz abc 100 150 80 qq lmn,ppq,brc,pqr