【问题标题】:Difficult aggregation with multi index in DataFrame in Python Pandas?Python Pandas 中 DataFrame 中的多索引难以聚合?
【发布时间】:2021-04-20 09:53:33
【问题描述】:

你好!我有如下数据框:

df = pd.DataFrame({"ID" : ["1", "1", "1", "2", "3"],
                   "ID2" : [10, 11, 10, 13, 14],
                   "ID3" : [1,2,1,4,5],
                   "code" : ["T", "N", "T", "T", np.nan],
                   "count" :[100, 200, 300 ,560,500]})

df.set_index(["ID", "ID2", "ID3"], inplace=True)

我需要将“col1”添加到该数据帧中,其中将包含:
每个多索引的“code”列是“T”的“count”列的总和

所以我需要如下结果。 1 和 3 中的 400 喜欢,因为 300 + 100 = 400 当然没有解决方案“这 3 个是多索引”它是为了帮助:)

【问题讨论】:

    标签: python pandas dataframe indexing aggregation


    【解决方案1】:

    如果code 中没有T,则使用Series.where 替换count 以错误值,然后使用GroupBy.transform 将每个ID 的总和添加到新列并最后设置NaNs 如果不匹配@ 987654330@:

    m = df['code'].eq('T')
    df['col1'] = df['count'].where(m).groupby(level=0).transform('sum').where(m)
    print (df)
               code  count   col1
    ID ID2 ID3                   
    1  10  1      T    100  400.0
       11  2      N    200    NaN
       10  1      T    300  400.0
    2  13  4      T    560  560.0
    3  14  5    NaN    500    NaN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 2017-03-24
      • 2021-04-06
      • 2021-04-06
      • 2017-06-20
      • 2016-06-24
      • 2013-09-08
      相关资源
      最近更新 更多