繁体   English   中英

如何生成带条件的熊猫数据框基础列表

[英]how to generate pandas dataframe basis list with condition

我在python中有以下列表

 movie_list = [11, 21, 31, 41, 51, 62, 55]

和以下电影数据帧

 userId      movieId
 1           11
 1           21
 1           31
 2           62
 2           55

现在我想做的是生成类似的数据帧,其中movieId不在数据帧中,但在 movie_list 中

我想要的数据框是

 userId      movieId
 1           41
 1           51
 1           62
 1           55
 2           11
 2           21
 2           31
 2           41
 2           51 

我怎样才能在pandas做到这一点?

IIUC,我们可以用listagg ,然后找到 df 中原始值与movie_list之间的movie_list

s=df.groupby('userId').movieId.agg(list).\
    map(lambda x : list(set(movie_list)-set(x))).explode().reset_index()
   userId movieId
0       1      41
1       1      51
2       1      62
3       1      55
4       2      41
5       2      11
6       2      51
7       2      21
8       2      31

一种方法是使用itertools.product创建userIdmovieId所有组合,然后concatdrop_duplicates

from itertools import product

movie_list = [11, 21, 31, 41, 51, 62, 55]
df_all = pd.DataFrame(product(df['userId'].unique(), movie_list), columns=df.columns)

df2 = pd.concat([df, df_all]).drop_duplicates(keep=False)

print(df2)

[出去]

    userId  movieId
3        1       41
4        1       51
5        1       62
6        1       55
7        2       11
8        2       21
9        2       31
10       2       41
11       2       51
prod = pd.MultiIndex.from_product([df.userId.unique().tolist(), movie_list]).tolist()
(
    pd.DataFrame(set(prod).difference([tuple(e) for e in df.values]), 
                 columns=['userId', 'movieId'])
    .sort_values(by=['userId', 'movieId'])
)


userId  movieId
7   1   41
6   1   51
2   1   55
8   1   62
5   2   11
4   2   21
3   2   31
1   2   41
0   2   51

我认为你需要:

 df = df.groupby("userId")["movieId"].apply(list).reset_index()
 df["movieId"] = df["movieId"].apply(lambda x: list(set(movie_list)-set(x)))

 df = df.explode("movieId")
 print(df)

输出:

    userId  movieId
0   1       41
0   1       51
0   1       62
0   1       55
1   2       41
1   2       11
1   2       51
1   2       21
1   2       31

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM