Pandasgroupby+lis

2024-10-01 11:29:23 发布

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

熊猫新手,如果这是旧帽子,我很抱歉。我要完成的工作与grouping rows in list in pandas groupby中包含的内容类似,但是我有两个以上的列,并且不知道如何将所有列与分组值一起显示。这就是我要做的。在

data = [{'ip': '192.168.1.1', 'make': 'Dell', 'model': 'UltraServ9000'},
{'ip': '192.168.1.3', 'make': 'Dell', 'model': 'MiniServ'},
{'ip': '192.168.1.5', 'make': 'Dell', 'model': 'UltraServ9000'},
{'ip': '192.168.1.6', 'make': 'HP', 'model': 'Thinger3000'},
{'ip': '192.168.1.8', 'make': 'HP', 'model': 'Thinger3000'}]

In [2]: df = pd.DataFrame(data)
In [3]: df
Out[4]:
            ip  make          model
0  192.168.1.1  Dell  UltraServ9000
1  192.168.1.3  Dell       MiniServ
2  192.168.1.5  Dell  UltraServ9000
3  192.168.1.6    HP    Thinger3000
4  192.168.1.8    HP    Thinger3000    

<magic>

Out[?]:    
            ip               make           model
0  192.168.1.1, 192.168.1.5  Dell   UltraServ9000
1  192.168.1.3               Dell        MiniServ
3  192.168.1.6, 192.168.1.8  HP       Thinger3000

提前感谢:)


Tags: inipdfdatamakemodelout帽子
1条回答
网友
1楼 · 发布于 2024-10-01 11:29:23

groupby接受一个参数by,通过该参数,您可以指定要操作groupby的变量list。所以这个问题的答案修改如下:

df.groupby(by = ["a", "c"])["b"].apply(list).reset_index()

编辑:查看您的注释:因为除了a之外的所有列都有相同的值,所以您可以在by参数中轻松地列出它们,因为它们不会影响结果。为了节省您的时间并防止您实际键入您可以执行以下操作的所有名称:

^{pr2}$

或者,您可以通过传递一个字典来利用agg函数,该字典对于所有列都采用max,而for b将返回列表:

aggregate_functions = {x: max for x in df.columns if x != "a" and x != "b"}
aggregate_functions["b"] = lambda x: list(x)
df.groupby(by = "a").agg(aggregate_functions)

你喜欢哪个取决于你自己,也许后者更具可读性。在

相关问题 更多 >