[英]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個 |
有人建議結合使用groupby
和cumsum()
但我不太確定如何使用?
每個客戶訪問的不同醫院的累計數量
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
刪除同一客戶對同一家醫院的連續訪問; 然后我們可以使用groupby
和cumcount
簡單地計算每個客戶的訪問。 但是,這會在刪除的行中留下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.