给定与某些特定值匹配的行,迭代数据帧其余部分的最快方法是什么?
例如,假设我有一个包含“日期”、“名称”和“电影”的数据框。可能有很多用户和电影。我想要所有看过同一个电影的约翰和艾丽西亚以前看过的电影。输入数据帧可以是:
date name movie
0 2018-01-16 10:33:59 Alicia Titanic
1 2018-01-17 08:49:13 Chandler Avatar
2 2018-01-18 09:29:09 Luigi Glass
3 2018-01-19 09:45:27 Alicia Die Hard
4 2018-01-20 10:08:05 Bouchra Pulp Fiction
5 2018-01-26 10:21:47 Bariza Glass
6 2018-01-27 10:15:32 Peggy Bumbleblee
7 2018-01-20 10:08:05 John Titanic
8 2018-01-26 10:21:47 Bariza Glass
9 2018-01-27 10:15:32 John Titanic
结果应该是:
date name movie
0 2018-01-16 10:33:59 Alicia Titanic
7 2018-01-20 10:08:05 John Titanic
9 2018-01-27 10:15:32 John Titanic
目前我正在做以下事情:
alicias = df[df['Name'] == 'Alicia']
df_res = pd.DataFrame(columns=df.columns)
for i in alicias.index:
df_res = df_res.append(alicias.loc[i], sort=False)
df_johns = df[(df['Date'] > alicias['Date'][i])
&(df['Name'] == 'John')
&(df['Movie'] == alicias['Movie'][i)]
df_res = df_res.append(df_johns, sort=False)
它有效,但这非常慢。我也可以使用更快的 groupby,但我希望结果保留初始行(示例中带有 'Alicia' 的行),我找不到使用 groupby 执行此操作的方法。
有什么帮助吗?
相关分类