[英]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)
使用.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
這已經接近了,但我想根據“主機”“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.