我有一個如下的資料框:
example_df = pd.DataFrame({"group_id": ["12356", "12356", "12359", "12356", "12359"], "date": ["2021-12-03", "2021-12-05", "2021-05-06", "2021-11-04", "2021-06-05"]})
我需要找到date每個組 id 列中的日期差異。例如,group_id=12356有 3 個可用日期
["2021-12-03", "2021-12-05", "2021-11-04"]
我需要這些天之間的差異。這些給定日期有 3 種組合。我撰寫的代碼不能按我想要的方式作業,而且速度很慢,因為我正在使用iterrows. 有沒有更短更簡單的方法來實作這一目標?
我的代碼:
%%time
date_diff_dict = {}
for index, row in example_df.iterrows():
group_id = row.group_id
group_id_df = example_df[example_df.group_id == group_id]
date_diff_list = []
for idx, rw in group_id_df.iterrows():
if (row.order_id != rw.order_id) & (row.order_id >= rw.order_id):
date_diff = np.abs((row.date - rw.date).days)
print(row.date, rw.date)
print(date_diff)
date_diff_list.append(date_diff)
print(date_diff_list)
date_diff_dict[str(group_id)] = date_diff_list
這段代碼給出了部分正確的答案,但錯過了一天。
預期輸出為:
{'12356': [2, 29, 31], '12359': [30]}
uj5u.com熱心網友回復:
這是一種方法:
(i) 將“日期”從字串文字轉換為日期時間物件
(ii) groupby"日期"
(iii) 對于每個組,用于itertools.combinations查找日期對
(iv) 求日期對之間天數的絕對差
from itertools import combinations
example_df['date'] = pd.to_datetime(example_df['date'])
out = example_df.groupby('group_id')['date'].apply(lambda date: [abs((y-x).days) for x,y in combinations(date, 2)]).to_dict()
輸出:
{'12356': [2, 29, 31], '12359': [30]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/409857.html
標籤:
