【问题标题】:How can I choose rows and columns if the index/header contains certain integer in Pandas dataframe?如果索引/标题在 Pandas 数据框中包含某些整数,我该如何选择行和列?
【发布时间】:2020-09-21 18:46:16
【问题描述】:

我有一个输入/输出数据,其中索引和标题具有代表不同类型行业的数字。我想创建新的列和行来表示属于某个行业组的列和行的总和。举个例子(请参考下面我手动制作的示例),我想创建新的行/列,其索引/标题为 US_industry_135/CAN_industry_135,它将对行业编号为 1 的行/列求和, 3或5。下面的示例是我手动创建的一个小集合,但我想知道是否有办法将条件放在总和中,以便我对索引/标题具有属于特定数字的行/列求和数字。我可以从标题/索引中提取数字并创建一个单独的行/列,但我想知道是否有一种方法可以直接从索引/标题中检查而不创建新列。提前感谢您的帮助!

import pandas as pd
data = {'US1':[3, 2, 1, 4,3,2,1,4,2,3,7,9],'US2':[8,4,9,2,1,3,4,2,5,6,18,11],'US3':[2,4,2,2,3,2,4,2,3,2,7,6],
    'US4':[7,4,8,2,2,3,2,4,6,8,17,15],'US5':[2,4,3,2,2,4,1,3,2,4,7,11],
   'CAN1':[3, 2, 1, 4,6,2,3,1,4,2,10,5],'CAN2':[8,4,9,2,5,7,3,5,7,1,22,13],'CAN3':[2,4,2,2,4,5,2,3,3,2,8,10],
    'CAN4':[7,4,8,2,2,3,1,3,2,4,17,10],'CAN5':[2,4,3,2,6,7,5,4,0,9,11,20],
   'US_IND_135':[7,10,6,8,8,8,6,9,7,9,21,26],'CAN_IND_135':[7,10,6,8,16,14,10,8,7,13,29,35]}
df = pd.DataFrame(data, index=['US1','US2','US3','US4','US5','CAN1','CAN2','CAN3','CAN4','CAN5','US_IND_135','CAN_IND_135'])
df

【问题讨论】:

    标签: python pandas dataframe indexing header


    【解决方案1】:

    让我们定义感兴趣的索引列表:

    idx = [1, 3, 5]
    

    使用指定的列进行求和:

    df[['US' + str(i) for i in idx]].sum(axis = 1)
    

    或者,如果您想将求和列加入数据框,您可以将结果分配给变量:

    s1 = df[['US' + str(i) for i in idx]].sum(axis = 1)
    s1.name = 'NEW_US_IND_' + ''.join("{0}".format(i) for i in idx)
    

    并添加新列:

    df.join(s1)
    

    【讨论】:

      猜你喜欢
      • 2020-06-13
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 2013-11-22
      相关资源
      最近更新 更多