Pandas - 合并具有相同名称开头的列的值

5
我希望能够对具有相同名称开头的列进行求和。
示例:
import pandas as pd
import numpy as np

df=pd.DataFrame({'product':['TV','COMPUTER','SMARTPHONE'],
                 'price_2012':np.random.randint(100,300,3),
                 'price_2013':np.random.randint(100,300,3),
                 'price_2014':np.random.randint(100,300,3),
                 'price_2015':np.random.randint(100,300,3),
                 'price_2016':np.random.randint(100,300,3)})

针对此示例,我想创建一个名为price_2012_2016的新列,其值等于2013年至2016年价格总和,而无需列出所有列。

PS: 在SAS中,我这样做:price_2012_2016=sum(of prix_2012-prix-2016);

诚挚地, Laurent A.


3
SO不是一个编程服务平台。请展示您自己的尝试,我们会尽力帮助您解决问题。 - Sevanteri
我可以通过以下方式得到结果:df['price_2013-2016']=df['price_2013']+df['price_2014']+df['price_2015']+df['price_2016'] - A Laurent
1
df[['price_' + str(i) for i in range(2013, 2017)]].sum() 的翻译是什么? - Anton Protopopov
7
你是想获取 df.filter(like='price').sum() 的结果吗? - EdChum
1
使用sum(axis=1),这两个解决方案都可以工作,非常感谢。 - A Laurent
1个回答

8
您可以采取以下操作:
df['price_2012_2016'] = df[[col for col in df.columns if col.startswith('price_')]].sum(axis=1)

这将计算 df 数据帧中以 "price_" 开头的列的总和,并将结果保存为 price_2012_2016 列。 axis=1 参数用于在列轴上计算总和而不是行,请参见下面的示例:

enter image description here


1
补充一下这篇文章,以防有人正在寻找对具有相同列名结尾的列求和,df["sum"] = result[[col for col in result.columns if col.endswith('_score')]].sum(axis=1) - EntzY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接