python - 在 pandas df 中识别具有相同员工的连接项目
问题描述
我想检查两个项目是否通过从事这些项目的人员联系起来。一个新的 df 应该表明任何两个项目是如何连接的。
直接相关:第一个项目中至少有一个人参与了第二个项目(connection=0
),
或间接相关:第一个项目的一个人与第二个项目的一个人在另一个项目上工作(connection=1
)。
原始 df 如下所示:
>>> import pandas as pd
>>> df_1 = pd.DataFrame({'person':['A','A','B','B','C','C','D'],
... 'project':['P1','P2','P1','P4','P2','P3','P3'],
... 'year':[2003,2004,2003,2006,2004,2005,2005]})
>>> df_1
person project year
0 A P1 2003
1 A P2 2004
2 B P1 2003
3 B P4 2006
4 C P2 2004
5 C P3 2005
6 D P3 2005
新创建的 df_2 应该如下所示:
>>> df_2 = pd.DataFrame({'first_project':['P1','P1','P1','P2','P2'],
... 'second_project':['P2','P3','P4','P3','P4'],
... 'connection':[0,1,0,0,1]})
>>> df_2
first_project second_project connection
0 P1 P2 0
1 P1 P3 1
2 P1 P4 0
3 P2 P3 0
4 P2 P4 1
知道什么是最快的方法吗?df_1 中有数百万个项目提前致谢!
解决方案
对于connection=0
,您可以在 person 上将数据框与其自身合并并删除重复的项目,其余的将是具有connection=0
.
以下是您的操作方法:
df_connection_zero = df.merge(df, left_on="person", right_on="person", suffixes = ("_first","_second"))
df_connection_zero = df_connection_zero[df_connection_zero["project_first"] !=df_connection_zero["project_second"]].drop_duplicates(subset=["person"])
df_connection_zero = df_connection_zero[["project_first","project_second"]]
df_connection_zero["connection"] = 0
我们会得到:
project_first project_second connection
P1 P2 0
P1 P4 0
P2 P3 0
因为connection=1
,它似乎有点复杂,如果我找到方法,我会告诉你。
推荐阅读
- python-3.x - 使用 OpenGL 和 Python3 绘制 STL
- permissions - 启用许可错误的 Hyperledger besu
- css - 在图像上添加字体真棒图标
- graphql - 从中继 11 在 useRefetchableFragment 挂钩上调用 refetch(...) 时出错
- php - WooCommerce 结帐显示基于特定运输类别的消息
- azure - 如果服务提供商结束的时间已过期,则 SAML LOGOUT
- c# - asp.net postgresql 连接 CRUD
- php - Symfony HTTP 客户端获取原始请求信息
- typescript - 映射`ConstructorParameters
` 元组到对象类型 - mongodb - 如何在 mongoDB 中进行查询以从两个具有计数布尔值的集合中获取结果