python dataframe两列相乘_python – 在DataFrame中堆叠两列,重复其他列

该博客介绍了如何在Python的Pandas DataFrame中高效地堆叠和合并'let1'和'let2'以及'num1'和'num2'两组列,并展示了使用pd.concat、drop、pd.melt和pd.lreshape等方法实现这一目标的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个像这样的结构的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', 'let2', 'num1', '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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值