【问题标题】:How do I sum data from certain columns and rows in a dataframe?如何对数据框中某些列和行的数据求和?
【发布时间】:2018-10-31 08:00:46
【问题描述】:

我有一堆矩阵存储在一个大数据框中。假设这是我的数据框。

data = pd.DataFrame([[13, 1, 3, 4, 0, 0], [0, 2, 6, 2, 0, 0], [3, 1, 5, 2, 2, 0], [0, 0, 10, 11, 6, 0], [5, 5, 21, 25, 41, 0],
[11, 1, 3, 2, 0, 1], [3, 1, 7, 3, 1, 1], [1, 1, 6, 5, 3, 1], [1, 1, 6, 7, 6, 1], [6, 6, 21, 24, 42, 1],
[17, 1, 7, 0, 0, 2], [1, 1, 6, 1, 1, 2], [2, 4, 6, 2, 1, 2], [0, 2, 11, 7, 8, 2], [5, 6, 17, 16, 46, 2],
[11, 1, 10, 2, 1, 3], [2, 2, 7, 1, 1, 3], [0, 0, 14, 4, 1, 3], [0, 0, 7, 7, 5, 3], [5, 1, 20, 18, 48, 3],
[16, 3, 7, 1, 2, 4], [1, 2, 4, 1, 0, 4], [2, 4, 7, 5, 3, 4], [3, 0, 4, 4, 7, 4], [7, 2, 13, 12, 58, 4]], 
columns=['1', '2', '3', '4', '5', 'iteration'])
print(pd.DataFrame(data))

每个data['iteration'] 都是一个独立的矩阵。因此,如您所见,这里有 5 个矩阵(迭代 0 到 4)。我想把它们全部加起来,就像在基本矩阵加法中一样,得到一个单一的矩阵。

我尝试了以下方法,但它有问题。它不起作用。

matrix = data[['1','2','3','4','5']]
print(np.sum([matrix[matrix_list['iteration']==i] for i in range(0,9)], axis=0))

我该如何以正确的方式做到这一点?

【问题讨论】:

    标签: python arrays pandas numpy dataframe


    【解决方案1】:

    你可以使用:

    In [98]: d = data.set_index('iteration')
    
    In [99]: np.sum(d.loc[i].values for i in d.index.drop_duplicates().values)
    Out[99]: 
    array([[ 68,   7,  30,   9,   3],
           [  7,   8,  30,   8,   3],
           [  8,  10,  38,  18,  10],
           [  4,   3,  38,  36,  32],
           [ 28,  20,  92,  95, 235]])
    

    或者,使用groupby():

    np.sum(e[1].iloc[:, :-1].values for e in data.groupby('iteration'))
    
    array([[ 68,   7,  30,   9,   3],
           [  7,   8,  30,   8,   3],
           [  8,  10,  38,  18,  10],
           [  4,   3,  38,  36,  32],
           [ 28,  20,  92,  95, 235]])
    

    【讨论】:

    • 谢谢,它有效。你能解释一下吗?为什么一定要在那儿使用drop_duplicates()
    • @AnnaRG d.index.drop_duplicates().values那部分本质上是range(5),在d.index中有很多重复值。
    • data[['iteration']].nunique()基本一样吗?您从 iteration 获得唯一值?
    • @AnnaRG 不,nunique() 是计算唯一值,drop_duplicates() 是给出所有唯一值。
    • 抱歉再次询问,为什么[1]?具体是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2019-08-01
    • 1970-01-01
    • 2022-09-27
    • 2016-01-27
    相关资源
    最近更新 更多