Python Pandas Groupby未按预期工作

2024-10-02 22:34:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,如下所示:

               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”列分组,这样它将把重复项聚合到同一行上。在

期望输出:

^{pr2}$

基于我阅读过的数不清的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

Tags: csv数据代码ipcomreadnamesdomain
2条回答

groupbyagg命令之间需要domain。如果需要,在管道连接周围添加间距,例如' | '.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

如果您的域中有浮动,最好将它们转换为字符串。在

^{pr2}$

我认为第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与aggregate column一起使用,正如他在回答中提到的Alexander。在

相关问题 更多 >