我有一个如下的数据框:
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
答案 0 :(得分:2)
domain
和groupby
命令之间需要agg
。如果需要,在管道连接周围添加间距,例如' | '.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)
答案 1 :(得分:1)
我认为第ip
列中的第一个值与我的第一行和第二行一样是唯一的 - 然后在domain
后的groupby
列中只得到一个值:
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
。