熊猫按姓名和索引大小变化的索引将每列相加

2024-09-28 22:38:13 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我当前命名为out的数据帧

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

我需要按日期对每个人的数据求和,显然跳过了日期列。我希望总数是列总和旁边的列。”用户添加,用户删除,用户总数”如下所示。我面临的问题是,前缀名称并不总是相同的,用户总数也会发生变化。 我的思考过程是计算列的总数。然后在他们之间循环计算,并将结果转储到每个用户的新列中。然后按字母顺序对列进行排序,以便将它们分组在一起

沿着这条线的东西

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

非常感谢您的帮助


Tags: 数据用户loopaddeddateouttotaldavid
3条回答

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]

或者:

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

我知道这并不是一个关于OP提出的问题的答案,而是一个关于解决他所面临问题的更好实践的建议

你有结构性问题。将数据帧建模为:

Date User_Name User_Added User_Removed User_Total

将使您输入的代码成为您问题的解决方案,同时处理可变的用户数

相关问题 更多 >