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

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

從pandas數據框創建列表以獲取列中的不同值

從pandas數據框創建列表以獲取列中的不同值

慕村9548890 2021-04-06 09:10:04
來自以下Pandas數據框。df = pd.DataFrame({'Id': [102,102,102,303,303,944,944,944,944],'A':[1.2,1.2,1.2,0.8,0.8,2.0,2.0,2.0,2.0],'B':[1.8,1.8,1.8,1.0,1.0,2.2,2.2,2.2,2.2],                  'A_scored_time':[10,25,0,33,0,40,0,90,0],'B_scored_time':[0,0,30,0,41,0,75,0,95]})我試圖創建源自的組合的['A_scored_time','B_scored_time']列表,以獲得以下與unique對應的列表Id:Id(102) = A_Time = [10,25],      B_Time = [30]Id(303) = A_Time = [33],         B_Time = [41]Id(944) = A_Time = [40,90],      B_Time = [75,95]該列表將在下面的功能中應用。x1 = [1,0,0] x2 = [0,1,0] x3 = [0,0,1]k = 100 # constanttotal_timeslot = 100 # same as kA_Time = []  B_Time = [] 對于范圍內的i(區別ID),df在此處具有3個不同的ID。對于每個i,概率陣列y。y = np.array([1-(A + B)/k, A/k, B/k])  def sum_squared_diff(x1, x2, x3, y):    ssd = []    for k in range(total_timeslot):          if k in A_Time:            ssd.append(sum((x2 - y) ** 2))        elif k in B_Time:            ssd.append(sum((x3 - y) ** 2))        else:            ssd.append(sum((x1 - y) ** 2))    return ssd輸出將是len k的數組。一旦獲得此值,我將對所有n(n個不同的Id)數組求和。這是我所追求的。結果為df:Id(102) = sum(sum_squared_diff(x1, x2, x3, y))  =5.872800000000018Id(303) = sum(sum_squared_diff(x1, x2, x3, y))  = 3.9407999999999896Id(944) = sum(sum_squared_diff(x1, x2, x3, y))  =7.760800000000006給予 toatl sum = 17.574400000000015.
查看完整描述

1 回答

?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

要回答標題中的問題,請使用:


df.groupby('Id')[['A_scored_time','B_scored_time']]\

  .agg(lambda x: x[x != 0].tolist())\

  .reset_index()

輸出:


    Id A_scored_time B_scored_time

0  102      [10, 25]          [30]

1  303          [33]          [41]

2  944      [40, 90]      [75, 95]


查看完整回答
反對 回復 2021-04-09
  • 1 回答
  • 0 關注
  • 740 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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