[英]Python Pandas Groupby not working as expected
我有一個像下面這樣的數據框:
ip domain
0 46.101.214.145 cnwkabrnyld1c0[.]com
1 46.101.214.145 anfj63m[.]com
2 46.101.214.145 anf3xnem[.]com
3 69.195.129.70 cnwkabrnyld1c0[.]com
4 69.195.129.70 anfj63ms[.]com
我正在嘗試對“ ip”列進行分組,以便將重復項匯總到同一行。
所需的輸出:
ip domain
0 46.101.214.145 cnwkabrnyld1c0[.]com | anfj63m[.]com | anf3xnem[.]com
3 69.195.129.70 cnwkabrnyld1c0[.]com
4 69.195.129.70 anfj63ms[.]com
根據我正在閱讀的無數SOF和Panda文檔,這似乎很簡單。
這是我的代碼:
pDNSPanda = pd.read_csv('/tmp/pDNSCSV.csv', names=['ip', 'domain'])
g = pDNSPanda.groupby("ip").agg('|'.join)
這是我實際上得到的:
domain
ip
0.0.0.0 ip|domain
1.1.1.200 ip|domain
1.148.56.163 ip|domain
1.167.81.129 ip|domain
1.193.28.230 ip|domain
編輯:
建議我針對上述數據集嘗試自己的代碼。
test.csv
46.101.214.145 cnwkabrnyld1c0[.]com
46.101.214.145 anfj63m[.]com
46.101.214.145 anf3xnem[.]com
69.195.129.70 cnwkabrnyld1c0[.]com
69.195.129.70 anfj63ms[.]com
>>> import pandas as pd
>>> p = pd.read_csv('/tmp/test.csv', names=['ip', 'domain'])
>>> g = p.groupby("ip").agg("|".join)
>>> print g
domain
ip
46.101.214.145 anfj63m[.]com ip|domain
46.101.214.145 anf3xnem[.]com ip|domain
46.101.214.145 cnwkabrnyld1c0[.]com ip|domain
69.195.129.70 anfj63ms[.]comp|domain
69.195.129.70 cnwkabrnyld1c0[.]com ip|domain
您需要在groupby
和agg
命令之間使用domain
。 如果需要,在管道連接周圍添加間距,例如' | '.join(...)
' | '.join(...)
pDNSPanda.groupby("ip").domain.agg('|'.join)
ip
46.101.214.145 cnwkabrnyld1c0[.]com|anfj63m[.]com|anf3xnem[.]com
69.195.129.70 cnwkabrnyld1c0[.]com|anfj63ms[.]com
Name: domain, dtype: object
如果您的域中有浮點數,則最好將它們轉換為字符串。
df['domain'] = df.domain.astype(str)
我認為ip
列中的第一個值像我的第一行和第二行一樣是唯一的-那么在groupby
之后您只能在列domain
得到一個值:
print pDNSPanda
ip domain
0 0.0.0.0 ip|domain
1 1.1.1.200 ip|domain
2 46.101.214.145 cnwkabrnyld1c0[.]com
3 46.101.214.145 anfj63m[.]com
4 46.101.214.145 anf3xnem[.]com
5 69.195.129.70 cnwkabrnyld1c0[.]com
6 69.195.129.70 anfj63ms[.]com
g = pDNSPanda.groupby("ip").agg('|'.join)
print g
domain
ip
0.0.0.0 ip|domain
1.1.1.200 ip|domain
46.101.214.145 cnwkabrnyld1c0[.]com|anfj63m[.]com|anf3xnem[.]com
69.195.129.70 cnwkabrnyld1c0[.]com|anfj63ms[.]com
但是我認為最好將groupby
與聚合列一起使用,正如Alexander
在他的回答中提到的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.