Pandas 嵌套循环,一行与特定值匹配

给定与某些特定值匹配的行,迭代数据帧其余部分的最快方法是什么?


例如,假设我有一个包含“日期”、“名称”和“电影”的数据框。可能有很多用户和电影。我想要所有看过同一个电影的约翰和艾丽西亚以前看过的电影。输入数据帧可以是:


                 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 执行此操作的方法。


有什么帮助吗?


慕雪6442864
浏览 220回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python