Pandas和Python中的自定义groupby查询,其中约束依赖于多行

2024-06-14 18:09:57 发布

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

我有两个字段电话号码和电子邮件。我想对来自同一个人的行进行分组,即电话号码或电子邮件必须相同。在

我可以使用groupby吗?我已经做了一个循环算法,使用字典等

示例:

index  phone  email
0      123    e@b.com
1      123    b@c.com
2      456    c@d.com
3      333    b@c.com
4      443    c@d.coom

我需要熊猫把指数0、1、3归在一起,其余的归在一起


Tags: com算法示例index字典电子邮件emailphone
1条回答
网友
1楼 · 发布于 2024-06-14 18:09:57

将数据加载到图形中。例如,使用networkx

G = nx.from_pandas_dataframe(df, 'email', 'phone', 'index')

创建一个图,其中在数据帧中列出的每个emailphone之间有一条边,并将相关联的索引作为该边的属性。在

然后个体可以被识别为图的connected components

^{pr2}$

然后可以找到与每个组件的边关联的索引值。 然后,可以使用索引对原始数据帧进行切片,从而向您显示与单个数据帧关联的所有行:

import pandas as pd
import networkx as nx
df = pd.DataFrame({'email': ['e@b.com', 'b@c.com', 'c@d.com', 'b@c.com', 'c@d.com'], 
                   'phone': [123, 123, 456, 333, 443], 'index': [0, 1, 2, 3, 4]})

G = nx.from_pandas_dataframe(df, 'email', 'phone', 'index')

components = nx.connected_component_subgraphs(G)
for cc in components:
    idx = [dct['index'] for node1, node2, dct in cc.edges(data=True)]
    group = df.iloc[idx]
    print(group)
    print('-'*80)

收益率

^{4}$

相关问题 更多 >