簡體   English   中英

Python Pandas 在底部求和唯一的 groupby 和總計

[英]Python Pandas sum unique groupby and total all at the bottom

我正在嘗試對 dataframe 進行分組並對每個組求和,然后將整個 dataframe 求和。 我有這個工作,但我對總數感到困惑。 我還想弄清楚如何在每個組的 host_count 中只有一個值。

import pandas as pd
# import numpy as np

data = {'host': ['1.1.1.1', '192.168.1.1', '192.168.1.1', '192.168.1.1', '172.16.1.2', '192.168.1.1', '172.16.1.2', '10.2.3.4', '10.0.0.1', '10.0.0.1'],
        'url': ['capps.test.com', 'attilab-admin.test.com', 'emea-solutions-admin.test.com', 'ilab-admin.test.com', 'learning.test.com', 'mktextfw.test.com', 'sandbox.learning.test.com', 'mynetwork.test.com', 'www.letsdoit.com', 'www.mysite.com']}

df = pd.DataFrame(data)

df['host_count'] = df.groupby('host')['url'].transform('count')
pivot1 = pd.pivot_table(df, index=['host', 'url'], columns=None, fill_value=0, dropna=True).sort_values(by='host_count', ascending=False)
print(pivot1)

eww 代碼圖片

使用.loc添加一個新行,默認情況下該行位於框架的底部:

pivot1.loc[("All", "All"), :] = pivot1.sum()

這是你要找的嗎?

df.pivot_table(index='host', values='url', aggfunc='nunique', margins=True)

Output:

             url
host
1.1.1.1        1
10.0.0.1       2
10.2.3.4       1
172.16.1.2     2
192.168.1.1    4
All           10

我正在尋找這樣的 output :

輸出

這已經接近了,但我想根據“主機”“url”組對每個組求和,然后對總計數求和。

import pandas as pd

data = {'host': ['1.1.1.1', '192.168.1.1', '192.168.1.1', '192.168.1.1', '172.16.1.2', '192.168.1.1', '172.16.1.2', '10.2.3.4', '10.0.0.1', '10.0.0.1'],
       'url': ['capps.test.com', 'attilab-admin.test.com', 'emea-solutions-admin.test.com', 'ilab-admin.test.com', 'learning.test.com', 'mktextfw.test.com', 'sandbox.learning.test.com', 'mynetwork.test.com', 'www.letsdoit.com', 'www.mysite.com']}

df = pd.DataFrame(data)

df['host_count'] = df.groupby('host')['url'].transform('count')
pivot1 = df.pivot_table(index=['host', 'url'], values='host_count', aggfunc='nunique')
pivot1.loc[("All", "All"), :] = pivot1.sum()

print(pivot1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM