如何在应用函数上连接总和,并将数据帧打印为文件中的表格格式



我正在尝试将"count"值连接到数据帧的第一行。

以下是我的起始数据示例:

Name,IP,Application,Count
Tom,100.100.100,MsWord,5
Tom,100.100.100,Excel,10
Fred,200.200.200,Python,1
Fred,200.200.200,MsWord,5

df = pd.DataFrame(data, columns=['Name', 'IP', 'Application', 'Count'])
df_new = df.groupby(['Name', 'IP'])['Count'].apply(lambda x:x.astype(int).sum())

如果我打印df_new,这将产生以下输出:

Name,IP,Application,Count
Tom,100.100.100,MsWord,15
................Excel,15
Fred,200.200.200,MsWord,6
................Python,6

如您所见,计数已正确计算,对于 Tom,它将 5 添加到 10 并得到 15 的输出。但是,这会显示在组的每一行上。

有没有办法获得如下输出 - 所以计数只在组的第一行:

Name,IP,Application,Count
Tom,100.100.100,MsWord,15
.................Excel
Fred,200.200.200,MsWord,6
.................Python

有没有办法以这种不错的格式将dt_new写入文件?我希望输出看起来像一个表格,几乎看起来像一个带有合并单元格的 excel 工作表。

我已经尝试过dt_new.to.csv('path')但这消除了我将dt输出到控制台时看到的漂亮格式。

处理数据帧并让它提供摘要行有点挑战。 通常,数据帧适用于不依赖于位置的结果,例如组中的最后一个项目。可以做到,但最好将这些问题分开。

import pandas as pd
from StringIO import StringIO
data = StringIO("""Name,IP,Application,Count
Tom,100.100.100,MsWord,5
Tom,100.100.100,Excel,10
Fred,200.200.200,Python,1
Fred,200.200.200,MsWord,5""")
#df = pd.DataFrame(data, columns=['Name', 'IP', 'Application', 'Count'])
#df_new = df.groupby(['Name', 'IP', 'Application'])['Count'].apply(lambda x:x.astype(int).sum())
df = pd.read_csv(data)
new_df = df.groupby(['Name', 'IP']).sum()
# reset the two levels of columns resulting from the groupby()
new_df.reset_index(inplace=True)
df.set_index(['Name', 'IP'], inplace=True)
new_df.set_index(['Name', 'IP'], inplace=True)
print(df)
                 Application  Count
Name IP                            
Tom  100.100.100      MsWord      5
     100.100.100       Excel     10
Fred 200.200.200      Python      1
     200.200.200      MsWord      5
print(new_df)
                  Count
Name IP                
Fred 200.200.200      6
Tom  100.100.100     15
print(new_df.join(df, lsuffix='_lsuffix', rsuffix='_rsuffix'))
                  Count_lsuffix Application  Count_rsuffix
Name IP                                                   
Fred 200.200.200              6      Python              1
     200.200.200              6      MsWord              5
Tom  100.100.100             15      MsWord              5
     100.100.100             15       Excel             10

从这里,您可以使用多索引访问组的总和。

最新更新