python – 在DataFrame中堆叠两列,重复其他列
发布时间:2020-12-20 11:53:12 所属栏目:Python 来源:网络整理
导读:我有一个像这样的结构的pandas DataFrame: df = pd.DataFrame( [ [ 'foo1','a','z','bar1',1,4 ],[ 'foo2','b','y','bar2',2,5 ],[ 'foo3','c','x','bar3',3,6 ] ] )df.columns = [ 'foo','let1','let2','bar','num1','num2' ]print( df ) foo let1 let2 ba
我有一个像这样的结构的pandas DataFrame:
df = pd.DataFrame( [ [ 'foo1','a','z','bar1',1,4 ],[ 'foo2','b','y','bar2',2,5 ],[ 'foo3','c','x','bar3',3,6 ] ] ) df.columns = [ 'foo','let1','let2','bar','num1','num2' ] print( df ) foo let1 let2 bar num1 num2 0 foo1 a z bar1 1 4 1 foo2 b y bar2 2 5 2 foo3 c x bar3 3 6 我想堆叠列let1和let2,并添加一个标签告诉它们来自哪里. num1和num2也是如此.最后,我想实现这个目标: foo let letval bar num numval 0 foo1 let1 a bar1 num1 1 1 foo2 let1 b bar2 num1 2 2 foo3 let1 c bar3 num1 3 3 foo1 let2 z bar1 num2 4 4 foo2 let2 y bar2 num2 5 5 foo3 let2 x bar3 num2 6 到目前为止,我已经这样做了: let = pd.concat( [ df.let1,df.let2 ] ) num = pd.concat( [ df.num1,df.num2 ] ) df = df.drop( ['let1','num2' ],axis=1 ) df = pd.concat( [ df,df ] ) df[ 'letval' ] = let df[ 'numval' ] = num print( df ) foo bar letval numval 0 foo1 bar1 a 1 1 foo2 bar2 b 2 2 foo3 bar3 c 3 0 foo1 bar1 z 4 1 foo2 bar2 y 5 2 foo3 bar3 x 6 但是,我很确定有一种更简单的方法可以实现这一点,而无需复制到虚拟变量和此类变通方法. 有任何想法吗? 解决方法
以下是我尝试将
@ayhan的解决方案与
pd.melt()方法相结合:
In [191]: (pd.melt(df.drop(['num1','num2'],1),id_vars=['foo','bar'],.....: var_name='let',value_name='letval') .....: .assign(numval=pd.lreshape(df.filter(like='num'),.....: {'numval': ['num1','num2']}))) Out[191]: foo bar let letval numval 0 foo1 bar1 let1 a 1 1 foo2 bar2 let1 b 2 2 foo3 bar3 let1 c 3 3 foo1 bar1 let2 z 4 4 foo2 bar2 let2 y 5 5 foo3 bar3 let2 x 6 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |