pandas 计算给定日期范围内各个日期的部门的汇总计数

pn9klfpd  于 2023-06-04  发布在  其他
关注(0)|答案(1)|浏览(148)

我有下表
| 功能|部门|开始日期|结束日期|
| - -----|- -----|- -----|- -----|
| 康斯特|常数1| 2023-03-01| 2023-03-05 2023-03-05|
| 康斯特|常数2| 2023-03-02 2023-03-02| 2023-03-03 2023-03-03 2023-03-03|
| 采矿|采矿1| 2023-03-02 2023-03-02| 2023-03-05 2023-03-05|
| 采矿|采矿2| 2023-03-01| 2023-03-06 2023-03-06|
| 康斯特|常数1| 2023-03-03 2023-03-03 2023-03-03| 2023-03-07 2023-03-07|
| 康斯特|常数2| 2023-03-02 2023-03-02| 2023-03-05 2023-03-05|
| 采矿|采矿1| 2023-03-06 2023-03-06| 2023-03-09 2023-03-09|
| 采矿|采矿2| 2023-03-05 2023-03-05| 2023-03-08 2023-03-08|
我想得到每个日期每个部门的总人数。开始日期和结束日期均包括在盘点中。
最好有一个如下的中间输出
| 功能|部门|日期|计数|
| - -----|- -----|- -----|- -----|
| 康斯特|常量1| 2023-03-01| 1|
| 康斯特|常量1| 2023-03-02 2023-03-02| 1|
| 康斯特|常量1| 2023-03-03 2023-03-03 2023-03-03| 2|
| 康斯特|常量1| 2023-03-04 2023-03-04| 2|
| 康斯特|常量1| 2023-03-05 2023-03-05| 2|
| 康斯特|常量1| 2023-03-06 2023-03-06| 1|
| 康斯特|常量1| 2023-03-07 2023-03-07| 1|
| 康斯特|常量1| 2023-03-08 2023-03-08| 0|
| 康斯特|常量1| 2023-03-09 2023-03-09| 0|
| 康斯特|常量1| 2023-03- 10 2023-03-10 2023-03-10| 0|
| 康斯特|常量2| 2023-03-01| 0|
| 康斯特|常量2| 2023-03-02 2023-03-02| 2|
| 康斯特|常量2| 2023-03-03 2023-03-03 2023-03-03| 2|
| 康斯特|常量2| 2023-03-04 2023-03-04| 1|
| 康斯特|常量2| 2023-03-05 2023-03-05| 1|
| 康斯特|常量2| 2023-03-06 2023-03-06| 0|
| 康斯特|常量2| 2023-03-07 2023-03-07| 0|
| 康斯特|常量2| 2023-03-08 2023-03-08| 0|
| 康斯特|常量2| 2023-03-09 2023-03-09| 0|
| 康斯特|常量2| 2023-03- 10 2023-03-10 2023-03-10| 0|
| 采矿|采矿1| 2023-03-01| 0|
| 采矿|采矿1| 2023-03-02 2023-03-02| 1|
| 采矿|采矿1| 2023-03-03 2023-03-03 2023-03-03| 1|
| 采矿|采矿1| 2023-03-04 2023-03-04| 1|
| 采矿|采矿1| 2023-03-05 2023-03-05| 1|
| 采矿|采矿1| 2023-03-06 2023-03-06| 1|
| 采矿|采矿1| 2023-03-07 2023-03-07| 1|
| 采矿|采矿1| 2023-03-08 2023-03-08| 1|
| 采矿|采矿1| 2023-03-09 2023-03-09| 1|
| 采矿|采矿1| 2023-03- 10 2023-03-10 2023-03-10| 0|
| 采矿|采矿2| 2023-03-01| 1|
| 采矿|采矿2| 2023-03-02 2023-03-02| 1|
| 采矿|采矿2| 2023-03-03 2023-03-03 2023-03-03| 1|
| 采矿|采矿2| 2023-03-04 2023-03-04| 1|
| 采矿|采矿2| 2023-03-05 2023-03-05| 2|
| 采矿|采矿2| 2023-03-06 2023-03-06| 2|
| 采矿|采矿2| 2023-03-07 2023-03-07| 1|
| 采矿|采矿2| 2023-03-08 2023-03-08| 1|
| 采矿|采矿2| 2023-03-09 2023-03-09| 0|
| 采矿|采矿2| 2023-03- 10 2023-03-10 2023-03-10| 0|
所需的最终输出是pandas df,如下所示
| 日期|常数1|常数2|采矿1|采矿2|
| - -----|- -----|- -----|- -----|- -----|
| 2023-03-01| 1| 0| 0| 1|
| 2023-03-02 2023-03-02| 1| 2| 1| 1|
| 2023-03-03 2023-03-03 2023-03-03| 2| 2| 1| 1|
| 2023-03-04 2023-03-04| 2| 1| 1| 1|
| 2023-03-05 2023-03-05| 2| 1| 1| 2|

js5cn81o

js5cn81o1#

df['Start Date'] = pd.to_datetime(df['Start Date'])
df['End Date'] = pd.to_datetime(df['End Date'])

dates = pd.date_range(df['Start Date'].min(), df['End Date'].max()) #get the complete dates in data set
final_df = pd.DataFrame({'Date': dates})
final_df = final_df.set_index('Date')

departments = df['Department'].unique()

for department in departments:
    mask = (df['Department'] == department)
    department_counts = (df.loc[mask, 'Start Date'].value_counts() + df.loc[mask, 'End Date'].value_counts()).sort_index()
    final_df[department] = department_counts

final_df = final_df.fillna(0)

相关问题