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

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

Python pandas:獲取組的第一個值

Python pandas:獲取組的第一個值

梵蒂岡之花 2023-06-27 13:22:23
我有一份記錄的診斷列表,如下所示:df = pd.DataFrame({    "DiagnosisTime": ["2017-01-01 08:23:00", "2017-01-01 08:23:00", "2017-01-01 08:23:03", "2017-01-01 08:27:00", "2019-12-31 20:19:39", "2019-12-31 20:19:39"],    "ID": [1,1,1,1,2,2]})可以通過 來識別多個主題ID。對于每個受試者可能有一個或多個診斷。每個診斷可能由多個條目組成(因為記錄了多個內容(不在本例中))。各個診斷(具有多行)可以(在某種程度上)通過DiagnosisTime. 然而,有時在寫入一個診斷的數據期間會出現一點延遲,因此我希望在分組時允許幾秒鐘的小容差DiagnosisTime。在此示例中,我想要的結果如下:1有兩個診斷ID:第 0、1、2 行和第 3 行。請注意,DiagnosisTime第 2 行與第 0 行和第 1 行相比略有不同ID。2 由第 4 行和第 5 行組成的 1 個診斷組成。對于每個ID我想將計數器設置回 1(或者 0,如果這樣更容易的話)。這就是我已經走了多遠:df["DiagnosisTime"] = pd.to_datetime(df["DiagnosisTime"])df["diagnosis_number"] = df.groupby([pd.Grouper(freq='5S', key="DiagnosisTime"), 'ID']).ngroup()我想我成功地識別出其中的診斷ID(不完全確定石斑魚),但我不知道如何重置計數器。如果這是不可能的,我也會對一個函數感到滿意,該函數返回該組中ID具有最低值的記錄的所有記錄diagnosis_number。
查看完整描述

1 回答

?
慕運維8079593

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

GroupBy.transform您可以使用and添加 lambda 函數factorize

df["diagnosis_number"] = (df.groupby('ID')['diagnosis_number']

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?.transform(lambda x: pd.factorize(x)[0]) + 1)

print (df)

? ? ? ? DiagnosisTime? ID? diagnosis_number

0 2017-01-01 08:23:00? ?1? ? ? ? ? ? ? ? ?1

1 2017-01-01 08:23:00? ?1? ? ? ? ? ? ? ? ?1

2 2017-01-01 08:23:03? ?1? ? ? ? ? ? ? ? ?1

3 2017-01-01 08:27:00? ?1? ? ? ? ? ? ? ? ?2

4 2019-12-31 20:19:39? ?2? ? ? ? ? ? ? ? ?1

5 2019-12-31 20:19:39? ?2? ? ? ? ? ? ? ? ?1


查看完整回答
反對 回復 2023-06-27
  • 1 回答
  • 0 關注
  • 283 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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