亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何將具有相同值的行分組?

如何將具有相同值的行分組?

達令說 2021-12-08 10:18:48
我有一個DataFrame df這樣的:     user_id  movie_id  rating32236   1        1        523171   1        2        383307   1        3        462631   1        4        347638   1        5        326184   2        1        41333    5        1        4172     5        2        354487   6        1        452430   7        4        518504   10       1        44617    10       4        4我想df根據 隨機分組user_id,并且每組具有相同數量的user_id(如果不能平均劃分,至少具有相似數量的user_id),但不合user_id并行。例如user_id,每組除以 2     user_id  movie_id  rating32236   1        1        523171   1        2        383307   1        3        462631   1        4        347638   1        5        352430   7        4        5     user_id  movie_id  rating26184   2        1        418504   10       1        44617    10       4        4     user_id  movie_id  rating1333    5        1        4172     5        2        354487   6        1        4我寫了一個方法group(df, n):def group(df, n) :    shuffled = df.sample(frac=1)    result = np.array_split(shuffled, n)     dict = {}    for i, part in enumerate(result):        dict['df_'+str(i+1)] = part    return dict但它不適用于出現在多行中的相同數字,例如df. 而且我只能設置分成多少組,不能設置user_id每個分成多少組。如何df根據 進行分組user_id,并且每個組都具有user_id我提到的選定數量?
查看完整描述

2 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

首先,獲取唯一的用戶 ID 并隨機排列它們:


uniques = np.random.permutation(df['user_id'].unique())


拆分唯一 ID(假設每個拆分 2 個 ID):


splits = np.array_split(uniques, len(uniques) // 2)


定義一個基于索引值對行進行分組的函數:


def grouper(value):

    return np.argmax([value in split for split in splits])

并使用它:


for group in df.set_index('user_id').groupby(grouper):

    print(group)


查看完整回答
反對 回復 2021-12-08
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

據我了解,您可以使用:


d={'df'+str(e):df[df.user_id.isin(i)] for e,i in 

    enumerate(np.array_split(np.random.permutation(df.user_id.unique()),

                                        len(df.user_id.unique())/2))}

輸出


{'df0':        user_id  movie_id  rating

 26184        2         1       4

 18504       10         1       4

 4617        10         4       4, 'df1':        user_id  movie_id  rating

 32236        1         1       5

 23171        1         2       3

 83307        1         3       4

 62631        1         4       3

 47638        1         5       3

 52430        7         4       5, 'df2':        user_id  movie_id  rating

 1333         5         1       4

 172          5         2       3

 54487        6         1       4}

您可以調用此字典中的每個鍵:


print(d['df1'])


       user_id  movie_id  rating

32236        1         1       5

23171        1         2       3

83307        1         3       4

62631        1         4       3

47638        1         5       3

52430        7         4       5


查看完整回答
反對 回復 2021-12-08
  • 2 回答
  • 0 關注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號