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

标签 python python-3.x pandas

我正在尝试将“计数”值连接到数据框的顶行。

这是我的起始数据的示例:

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 输出到控制台时看到的良好格式。

最佳答案

处理 DataFrame 并让它提供汇总行是一个挑战。一般来说,DataFrame 适合于不依赖于位置的结果,例如组中的最后一项。可以做到,但最好将这些问题分开。

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

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

关于python - 如何在应用函数上连接 sum 并将数据帧打印为文件中的表格格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55405018/

相关文章:

python - Python 中的马尔可夫聚类

python - 在 pandas to_html 中格式化输出数据

python - 更快、对 Pandas 友好的方式来完成这个算法?

python - Django - 通过 bool 运算对模型进行排序的最佳方式

python - 如何在Django中捕获CSRF错误

python - 你将如何删除python中这4行的重复性?

python - 带有嵌套列表到 Dataframe 的字典

python - 如何在 python 中解析格式错误的 HTML

python - 使用 Scapy 提取 RDNS 请求中包含的地址

csv - 未知列的 read_csv 转换器