Python 基于不相关列的唯一性查找两列的并集
我试图确定每个学生在面对面的基础上,他们所上的课程和完成的项目的表现 scores.csv: 我最终会自己做Python 基于不相关列的唯一性查找两列的并集,python,pandas,dataframe,Python,Pandas,Dataframe,我试图确定每个学生在面对面的基础上,他们所上的课程和完成的项目的表现 scores.csv: 我最终会自己做来分析,但首先使用pd.merge是非常慢的,特别是如果有10个成千上万的唯一学生ID 有没有更有效的方法?我尝试过使用pivot table,但可能我用这种方法找错了方向。我认为使用pivot table要快一点: 不带连接列的合并的解决方案,以及: 谢谢你的回答@jezrael,但我如何才能使用每组?有没有一种方法可以将组存储在字典中而不是打印出来?我试图用一种类似的方法来计算每组的帖
来分析
,但首先使用pd.merge
是非常慢的,特别是如果有10个成千上万的唯一学生ID
有没有更有效的方法?我尝试过使用pivot table,但可能我用这种方法找错了方向。我认为使用pivot table要快一点: 不带连接列的合并的解决方案,以及:
谢谢你的回答@jezrael,但我如何才能使用每组?有没有一种方法可以将组存储在字典中而不是打印出来?我试图用一种类似的方法来计算每组的帖子数量:
df.groupby('student\u id').transform(lambda x:pd.merge(df,x['class\u id','project\u id']])['posts'].sum()
,但它不起作用。我认为你真的很接近了-需要apply
-df1=df.groupby('student\u id').apply(lambda x:pd.merge(df,x)[['class\u id','project\u id']]].['posts'].sum())
和for dictdf1=df.groupby('student\u id')。应用(lambda x:pd.merge(df,x['class\u id','project\u id']])。to\u dict()。
(可能最后一次to\u dict
可以删除,这取决于您想要什么)
import pandas as pd
df = pd.read_csv("Documents/scores.csv")
student_ids = df.student_id.unique()
for id in student_ids:
to_analyse = pd.merge(df,df[df['student_id'] == id][['class_id','project_id']])
def f(x):
print (pd.merge(df, x[['class_id','project_id']]))
df = df.groupby('student_id').apply(f)
df['both'] = df['class_id'].astype(str) + '_' + df['project_id'].astype(str)
def f(x):
print (df[df['both'].isin(x['both'])])
df = df.groupby('student_id').apply(f).drop('both', axis=1)