簡體   English   中英

如何在 python 中生成組級別的累積唯一計數?

[英]How to generate cumulative unique count at a group level in python?

我有一些醫院訪問醫療保健數據,格式為 dataframe:

記錄編號 client_id 相遇日期 醫院編號
1個 MK456 2014-01-01 01J
2個 JJ103 2016-04-01 02J
3個 MK456 2014-02-26 01J
4個 JJ103 2016-05-01 02H
5個 MK456 2014-03-01 02H
6個 JJ103 2016-06-06 02J

我想創建一個hospital_count列,它是每個客戶在date_of_counter就診的 UNIQUE 醫院的累計計數。 我已經按client_id
date_of_counter 結果轉換將是

記錄編號 client_id 相遇日期 醫院編號 醫院計數
1個 MK456 2014-01-01 01J 1個
3個 MK456 2014-02-26 01J 1個
5個 MK456 2014-03-01 02H 2個
2個 JJ103 2016-04-01 02J 1個
4個 JJ103 2016-05-01 02H 2個
6個 JJ103 2016-06-06 02J 2個

有人建議結合使用groupbycumsum()但我不太確定如何使用?

使用GoupBy.cumcount

每個客戶訪問的不同醫院的累計數量

import pandas as pd

df = pd.DataFrame({
  'record_id': list(range(1,7)),
  'client_id':['MK', 'JJ', 'MK', 'JJ', 'MK', 'JJ'],
  'date': [20140101, 20160401,20140226,20160501,20140301,20160606],
  'hospital': ['1j', '2j', '1j', '2h', '2h', '2j']
})

df.sort_values(by=['client_id', 'date'], inplace=True)

df['hospital_count'] = df.drop_duplicates(subset=['client_id', 'hospital']
  ).groupby('client_id').cumcount() + 1

df.fillna(method='ffill', inplace=True)

print(df)
#    record_id client_id      date hospital  hospital_count
# 1          2        JJ  20160401       2j             1.0
# 3          4        JJ  20160501       2h             2.0
# 5          6        JJ  20160606       2j             2.0
# 0          1        MK  20140101       1j             1.0
# 2          3        MK  20140226       1j             1.0
# 4          5        MK  20140301       2h             2.0

解釋:我們使用drop_duplicates刪除同一客戶對同一家醫院的連續訪問; 然后我們可以使用groupbycumcount簡單地計算每個客戶的訪問。 但是,這會在刪除的行中留下NaN值; 我們使用fillna填充這些值。

每位客戶到每家醫院的累計就診次數

import pandas as pd

df = pd.DataFrame({
  'record_id': list(range(1,7)),
  'client_id':['MK', 'JJ', 'MK', 'JJ', 'MK', 'JJ'],
  'date': [20140101, 20160401,20140226,20160501,20140301,20160606],
  'hospital': ['1j', '2j', '1j', '2h', '2h', '2j']
})

df['hospital_count'] = df.sort_values(by=['client_id', 'hospital', 'date']
  ).groupby(['client_id', 'hospital']
  ).cumcount() + 1

print(df)
#    record_id client_id      date hospital  hospital_count
# 0          1        MK  20140101       1j               1
# 1          2        JJ  20160401       2j               1
# 2          3        MK  20140226       1j               2
# 3          4        JJ  20160501       2h               1
# 4          5        MK  20140301       2h               1
# 5          6        JJ  20160606       2j               2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM