python excel 分組統計一個時間段內的數據,如三個月內,但不限於某個時間起止,是任何三個月的長度內

"""
分組統計一個時間段內的數據,如三個月內,但不限於某個時間起止,是任何三個月的長度內
"""

import pandas as pd
import openpyxl
import datetime
import numpy as np

df = pd.DataFrame(pd.read_excel('F:/test/三個月內出現大於三次記錄.xlsx',sheet_name = 'Sheet1'))
#將str類型轉爲時間類型
df['入院日期'] = pd.to_datetime(df['入院日期'])

djxh = set()
#通過groupby進行分組
for groupName, groupDf in df.groupby('身份證號'):
    #遍歷分組裏的行
    for index,row in groupDf.iterrows():
        # + datetime.timedelta(days = 92)表示加上92天(三個月)
        startDate = pd.to_datetime(row['入院日期'])
        if groupDf[(startDate < groupDf['入院日期']) & (groupDf['入院日期'] <startDate + datetime.timedelta(days = 92))].count()['身份證號'] > 3:
            #符合條件的添加到集合當中
            djxh.add(groupName) 
           
        #這裏只要符合條件的就退出循環,根據實際情況設置
        break

#篩選符合條件的數據,astype(str)轉爲str類型,空值將變爲'nan',如果不轉爲str類型,int類型保存到excel時會丟失數據,最後幾位變爲0        
df2 = df[df['身份證號'].isin(djxh)].astype(str)
#將'nan'值替換爲空,這樣在excel中空值不保存爲nan
df2 = df2.replace('nan', np.nan)
#保存到excel
print(df2)
df2.to_excel("F:/test/三個月內出現-(已去重).xlsx")

print("sucess")

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章