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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何為每個(gè)組的列中的順序分配一個(gè)值基礎(chǔ)?

如何為每個(gè)組的列中的順序分配一個(gè)值基礎(chǔ)?

夢里花落0921 2023-07-18 17:48:54
我有以下數(shù)據(jù),End1、End2 處的值按順序出現(xiàn),我想要另一列來確定它在 End1 處出現(xiàn)的順序。End2 處的值有可能永遠(yuǎn)不會(huì)到達(dá) End1 處,但如果它出現(xiàn)在任何地方,都會(huì)對(duì)下一項(xiàng)的順序產(chǎn)生影響。ID   End1   End2  1    A      B      1    A      B      1    B      A     1    A      B1    C      B1    C      D1    D      C1    C      D1    D      C2    A      B2    A      B2    A      C2    A      C2    C      A2    C      A2    D      C2    C      D2    D      C我想要有以下輸出:ID   End1   End2  Order1    A      B      11    A      B      11    B      A      2     1    A      B      11    C      B      3 1    C      D      31    D      C      41    C      D      31    D      C      42    A      B      12    A      B      12    A      C      12    A      C      1 2    C      A      32    C      A      32    D      C      42    C      D      32    D      C      4我嘗試了不同的函數(shù),但它們都在計(jì)算該值的出現(xiàn)次數(shù)。任何幫助表示贊賞。更新:這里還有另外兩個(gè)要求:每個(gè)組的順序都會(huì)重置。雖然 A 在 ID=1 時(shí)可能具有階數(shù) 1,但對(duì)于任何其他 ID,它可能具有階數(shù) 2。一些建議的解決方案沒有考慮到 End2 處的項(xiàng)目(對(duì)于 ID=2 中的 B)可能永遠(yuǎn)不會(huì)到達(dá) End1。但它會(huì)影響其后的項(xiàng)目的順序。為了更清楚地說明 ID=3 在同一數(shù)據(jù)集中可能有以下數(shù)據(jù):ID End1 End22  D    C  .....  3  B    E 3  E    B3  E    B3  G    B3  C    B所需的輸出是ID End1 End2 Order2  D    C    4 .....  3  B    E    13  E    B    23  E    B    2 3  G    B    33  C    B    4
查看完整描述

3 回答

?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊

將索引設(shè)置為ID并使用DataFrame.stack來重塑框架,然后使用Series.factorize創(chuàng)建一個(gè)標(biāo)識(shí)不同值的數(shù)字?jǐn)?shù)組,從而創(chuàng)建一個(gè)系列s,然后使用Series.groupbyons和agg使用first(因?yàn)槲覀儽仨毷紫葍?yōu)先考慮列的順序End1End2


s = pd.Series(df.set_index('ID').stack().factorize()[0] + 1)

df['Order'] = s.groupby(s.index // 2).first()

編輯:如果我們需要考慮每組的不同值:


s = pd.Series(np.hstack([g.factorize()[0] + 1 for _, g in

? ? ? ? ? ? ? ? ? ? ? ? ?df.set_index('ID').stack().groupby(level=0)]))

df['Order'] = s.groupby(s.index // 2).first()

結(jié)果:


? ? ID End1 End2? Order

0? ? 1? ? A? ? B? ? ? 1

1? ? 1? ? A? ? B? ? ? 1

2? ? 1? ? B? ? A? ? ? 2

3? ? 1? ? A? ? B? ? ? 1

4? ? 1? ? C? ? B? ? ? 3

5? ? 1? ? C? ? D? ? ? 3

6? ? 1? ? D? ? C? ? ? 4

7? ? 1? ? C? ? D? ? ? 3

8? ? 1? ? D? ? C? ? ? 4

9? ? 2? ? A? ? B? ? ? 1

10? ?2? ? A? ? B? ? ? 1

11? ?2? ? A? ? C? ? ? 1

12? ?2? ? A? ? C? ? ? 1

13? ?2? ? C? ? A? ? ? 3

14? ?2? ? C? ? A? ? ? 3

15? ?2? ? D? ? C? ? ? 4

16? ?2? ? C? ? D? ? ? 3

17? ?2? ? D? ? C? ? ? 4


查看完整回答
反對(duì) 回復(fù) 2023-07-18
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

import pandas as pd

df = pd.DataFrame({'ID': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 2, 10: 2, 11: 2, 12: 2, 13: 2, 14: 2, 15: 2, 16: 2, 17: 2},

                   'End1': {0: 'A', 1: 'A', 2: 'B', 3: 'A', 4: 'C', 5: 'C', 6: 'D', 7: 'C', 8: 'D', 9: 'A', 10: 'A', 11: 'A', 12: 'A', 13: 'C', 14: 'C', 15: 'D', 16: 'C', 17: 'D'},

                   'End2': {0: 'B', 1: 'B', 2: 'A', 3: 'B', 4: 'B', 5: 'D', 6: 'C', 7: 'D', 8: 'C', 9: 'B', 10: 'B', 11: 'C', 12: 'C', 13: 'A', 14: 'A', 15: 'C', 16: 'D', 17: 'C'}})

pandas.unique將給出出現(xiàn)的順序。


sequence查找該列的每個(gè)值的索引End1。分組依據(jù)'ID'因此順序是唯一的'ID'。堆疊每個(gè)組/數(shù)據(jù)幀可以使列變平['End1','End2']。


df = df.set_index('ID')

gb = df.groupby('ID')

for k,g in gb:

    sequence = pd.unique(g.stack())

    order = (g.End1.to_numpy() == sequence[:,None]).argmax(0) + 1        

    df.loc[k,'Order'] = order

df.Order = df.Order.astype(int)    

def f(g):

    sequence = pd.unique(g.stack())

    order = (g.End1.to_numpy() == sequence[:,None]).argmax(0) + 1

    return order

gb = df.groupby('ID')

orders = gb.apply(f)

df.loc[orders.index,'foo'] = np.concatenate(orders.values)


查看完整回答
反對(duì) 回復(fù) 2023-07-18
?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊

一種可能的方法是連接 End1+End2 中的字符串值,并將結(jié)果用作字典的鍵。該算法看起來像:


counter = 1

new_column = []

my_dict = dict()

for row in data:

  key_to_check = row[End1]+row[End2]

  if key_to_check in my_dict:

     new_column.append(my_dict[key_to_check])

  else:

     my_dict[key_to_check] = counter

     new_column.append(my_dict[key_to_check])

  counter += 1


## append new_column to the data


查看完整回答
反對(duì) 回復(fù) 2023-07-18
  • 3 回答
  • 0 關(guān)注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)