熊猫会按索引对其他各列进行汇总,其中名称和索引大小会发生变化

时间:2019-02-20 16:43:21

标签: python pandas python-2.7

这是我当前的数据框名称

Date    David_Added David_Removed   Malik_Added Malik_Removed   Meghan_Added    Meghan_Removed  Sucely_Added    Sucely_Removed
02/19/2019  3   1   39  41  1   6   14  24
02/18/2019  0   0   8   6   0   3   0   0
02/16/2019  0   0   0   0   0   0   0   0
02/15/2019  0   0   0   0   0   0   0   0
02/14/2019  0   0   0   0   0   0   0   0
02/13/2019  0   0   0   0   0   0   0   0
02/12/2019  0   0   0   0   0   0   0   0
02/11/2019  0   0   0   0   0   0   0   0
02/08/2019  0   0   0   0   0   0   0   0
02/07/2019  0   0   0   0   0   0   0   0

我需要按日期对每个人的数据求和,显然要跳过“日期”列。我希望总数成为汇总列旁边的列。如下所示,“ User_Add,User_Removed,User_Total”。我面临的问题是前缀名称不会总是相同,并且用户总数会发生变化。 我的思考过程将是计算总列数。然后遍历他们进行数学运算,然后将结果转储给每个用户一个新列。然后按字母顺序对列进行排序,以便将它们分组在一起。

类似的东西

loops = out.shape[1]
while loop < loops:
    out['User_Total'] = out['User_Added']+out['User_Removed']
    loop += 1
out.sort_index(axis=1, inplace=True)

但是我不确定如何通过索引调用整个列,或者这是否是处理它的好方法。

这是我希望输出显示的样子。

Date    David_Added David_Removed   David_Total Malik_Added Malik_Removed   Malik_Total Meghan_Added    Meghan_Removed  Meghan_Total    Sucely_Added    Sucely_Removed  Sucely_Total
2/19/2019   3   1   4   39  41  80  1   6   7   14  24  38
2/18/2019   0   0   0   8   6   14  0   3   3   0   0   0
2/16/2019   0   0   0   0   0   0   0   0   0   0   0   0
2/15/2019   0   0   0   0   0   0   0   0   0   0   0   0
2/14/2019   0   0   0   0   0   0   0   0   0   0   0   0
2/13/2019   0   0   0   0   0   0   0   0   0   0   0   0
2/12/2019   0   0   0   0   0   0   0   0   0   0   0   0
2/11/2019   0   0   0   0   0   0   0   0   0   0   0   0
2/8/2019    0   0   0   0   0   0   0   0   0   0   0   0
2/7/2019    0   0   0   0   0   0   0   0   0   0   0   0

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

groupby与列split一起使用

s=df.groupby(df.columns.str.split('_').str[0],axis=1).sum().drop('Date',1).add_suffix('_Total')
yourdf=pd.concat([df,s],1).sort_index(level=0,axis=1)
yourdf
Out[455]: 
         Date  David_Added      ...       Sucely_Removed  Sucely_Total
0  02/19/2019            3      ...                   24            38
1  02/18/2019            0      ...                    0             0
2  02/16/2019            0      ...                    0             0
3  02/15/2019            0      ...                    0             0
4  02/14/2019            0      ...                    0             0
5  02/13/2019            0      ...                    0             0
6  02/12/2019            0      ...                    0             0
7  02/11/2019            0      ...                    0             0
8  02/08/2019            0      ...                    0             0
9  02/07/2019            0      ...                    0             0
[10 rows x 13 columns]

答案 1 :(得分:2)

或者:

df.join(df.T.groupby(df.T.index.str.split("_").str[0]).sum().T.iloc[:,1:].add_suffix('_Total'))

        Date  David_Added  David_Removed  Malik_Added  Malik_Removed  \
0  02/19/2019            3              1           39             41   
1  02/18/2019            0              0            8              6   
2  02/16/2019            0              0            0              0   
3  02/15/2019            0              0            0              0   
4  02/14/2019            0              0            0              0   
5  02/13/2019            0              0            0              0   
6  02/12/2019            0              0            0              0   
7  02/11/2019            0              0            0              0   
8  02/08/2019            0              0            0              0   
9  02/07/2019            0              0            0              0   

   Meghan_Added  Meghan_Removed  Sucely_Added  Sucely_Removed David_Total  \
0             1               6            14              24           4   
1             0               3             0               0           0   
2             0               0             0               0           0   
3             0               0             0               0           0   
4             0               0             0               0           0   
5             0               0             0               0           0   
6             0               0             0               0           0   
7             0               0             0               0           0   
8             0               0             0               0           0   
9             0               0             0               0           0   

  Malik_Total Meghan_Total Sucely_Total  
0          80            7           38  
1          14            3            0  
2           0            0            0  
3           0            0            0  
4           0            0            0  
5           0            0            0  
6           0            0            0  
7           0            0            0  
8           0            0            0  
9           0            0            0

答案 2 :(得分:-1)

我知道这并不是对OP提出的问题的答案,而是对可以解决他所面临问题的更好实践的建议。

您遇到结构性问题。对数据框进行如下建模:

Date User_Name User_Added User_Removed User_Total

除了处理可变数量的用户之外,还将为您输入解决问题的代码。