第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何生成帶有條件的熊貓數(shù)據(jù)框基礎列表

如何生成帶有條件的熊貓數(shù)據(jù)框基礎列表

MMTTMM 2022-07-05 18:48:59
我在python中有以下列表 movie_list = [11, 21, 31, 41, 51, 62, 55]和以下電影數(shù)據(jù)框 userId      movieId 1           11 1           21 1           31 2           62 2           55現(xiàn)在我想做的是生成類似的數(shù)據(jù)幀,其中movieId不在數(shù)據(jù)幀中,但在movie_list中我想要的數(shù)據(jù)框是 userId      movieId 1           41 1           51 1           62 1           55 2           11 2           21 2           31 2           41 2           51 我該怎么做pandas?
查看完整描述

4 回答

?
侃侃爾雅

TA貢獻1801條經(jīng)驗 獲得超16個贊

IIUC,我們可以agg用做list,然后找出 df 中的原始值與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


查看完整回答
反對 回復 2022-07-05
?
精慕HU

TA貢獻1845條經(jīng)驗 獲得超8個贊

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


查看完整回答
反對 回復 2022-07-05
?
HUH函數(shù)

TA貢獻1836條經(jīng)驗 獲得超4個贊

一種方法是用于itertools.product創(chuàng)建userId& movieId、 thenconcat和的所有組合drop_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


查看完整回答
反對 回復 2022-07-05
?
千萬里不及你

TA貢獻1784條經(jīng)驗 獲得超9個贊

我認為你需要:


 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


查看完整回答
反對 回復 2022-07-05
  • 4 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號