Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 向数据帧添加一行总计_Pandas_Sum_Append - Fatal编程技术网

Pandas 向数据帧添加一行总计

Pandas 向数据帧添加一行总计,pandas,sum,append,Pandas,Sum,Append,我有一个数据框,我正试图找出如何向每个客户机添加一行,以汇总每个客户机的小时数。以下是我的数据框示例: hours client month A January 203.50 February 227.75 March 159.75 April

我有一个数据框,我正试图找出如何向每个客户机添加一行,以汇总每个客户机的小时数。以下是我的数据框示例:

                              hours
client           month

A               January       203.50
                February      227.75
                March         159.75
                April         203.25
                May           199.90

B               January        203.50
                February       227.75
                March         159.75
                April          203.25
                May            199.90

C               January       203.50
                February      227.75
                March          159.75
                April         203.25
                May           199.90
我想在每个客户机上添加一行,总结小时数。它看起来是这样的:

                           hours
client           month

A               January    203.50
                February   227.75
                March      159.75
                April      203.25
                May        199.90
                Total     1000.34

B               January    203.50
                February   227.75
                March      159.75
                April      203.25
                May       199.90
                Total     1000.34

C               January   203.50
                February   227.75
                March      159.75
                April      203.25
                May       199.90
                Total     1000.34
我已经厌倦了编写一个for循环,它遍历每个客户机,汇总小时数,然后将新行附加到每个客户机。我正在尝试的循环看起来像这样

在df中的小时数: df.append(pd.Series(vp.sum(),name='Total'


但是,这不起作用。任何帮助都将不胜感激!!

IIUC,您可以使用
concat

pd.concat([df,df.sum(level=0).assign(month='Total').set_index('month',append=True)]).sort_index()
Out[1754]: 
                  hours
client month           
A      April     203.25
       February  227.75
       January   203.50
       March     159.75
       May       199.90
       Total     994.15
B      April     203.25
       February  227.75
       January   203.50
       March     159.75
       May       199.90
       Total     994.15
C      April     203.25
       February  227.75
       January   203.50
       March     159.75
       May       199.90
       Total     994.15

您可以
unstack
然后添加列

df.unstack().hours.assign(Total=lambda d: d.sum(1)).stack().to_frame('hours')

                  hours
client month           
A      April     203.25
       February  227.75
       January   203.50
       March     159.75
       May       199.90
       Total     994.15
B      April     203.25
       February  227.75
       January   203.50
       March     159.75
       May       199.90
       Total     994.15
C      April     203.25
       February  227.75
       January   203.50
       March     159.75
       May       199.90
       Total     994.15

保留原始行顺序的变体:

# get old order of months
months = pd.unique(df.index.get_level_values(1)).tolist()

# create total dataframe with to levels of index
totals = pd.DataFrame.from_dict({
    (client, 'Total'): {'hours': v}
    for client, v in df.hours.sum(level=0).items()
}, 'index')

# append and reindex
df.append(totals).sort_index().reindex(months + ['Total'], level=1)

                  hours
client month           
A      January   203.50
       February  227.75
       March     159.75
       April     203.25
       May       199.90
       Total     994.15
B      January   203.50
       February  227.75
       March     159.75
       April     203.25
       May       199.90
       Total     994.15
C      January   203.50
       February  227.75
       March     159.75
       April     203.25
       May       199.90
       Total     994.15

我把它放在for循环中了吗?我写了你所说的,它不是在每个客户机的末尾添加一个名为“Total”的行,而是在每个客户机的末尾添加所有总计行df@TimothyMcwilliams你看到排序索引了吗?@TimothyMcwilliams-Yw~快乐编码