Python发现哪些项目有截取日期

2024-09-25 16:30:09 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我发现在我的数据集中,有几个项目在相似的时间段参与。样本数据

import pandas as pd

df = pd.DataFrame({"Proj": ["a", "b", "c"],
               "Start": ['2017-01-01', '2017-02-01', '2017-03-15'],
               "End": ['2017-02-28','2017-03-01','2017-04-15'],
               "Mon": [0.8,0.4,0.5],
               "Tues": [0.6,0.4,0.5],
               "Wed": [0.4,0.1,0.5],
               "Thurs": [0.2,0,0.5],
               "Fri": [0,0.5,0.5]
               })

例如上面的数据集

项目A从“2017-01-01”到“2017-02-28” 然而,项目B从“2017-02-01”到“2017-03-01” 这意味着在“2017-02-01”至“2017-02-28”期间,项目A和B同时运行

我想做的是要么做一个新的表格来显示交叉点,要么用某种方式来可视化数据。如果我需要把它转换成一个新的表,我要做的就是让它看起来像

Start        End          Proj   Mon   Tues   Wed   Thurs   Fri
2017-01-01   2017-02-01   A      0.8    0.6   0.4   0.2     0
2017-02-01   2017-02-28   A,B    1.2    1     0.5   0.2     0.5
2017-02-28   2017-03-01   B      0.4    0.4   0.1   0       0.5
2017-03-15   2017-04-15   C      0.5    0.5   0.5   0.5     0.5

有什么想法如何转换初始表以获得这种输出,或者我可以做什么样的可视化来显示类似的东西


Tags: 数据项目import可视化startendpdproj
1条回答
网友
1楼 · 发布于 2024-09-25 16:30:09

我想把它变成这样:

date       A     B     C
2017-01-31 True  False False
2017-02-01 True  True  False
2017-02-02 True  True  False

因此,首先从第一个开始到最后一个结束生成DatetimeIndex:

days = pd.DatetimeIndex(start=df.Start.min(), end=df.End.max(), freq='B')

然后用该索引和columns=df.Proj创建一个新的数据帧,初始值为False

gantt = pd.DataFrame(False, days, df.Proj)

然后将每个项目处于活动状态的单元格更改为True:

for row in df.itertuples():
    gantt[row.Proj][row.Start:row.End] = True

一旦转换了表,就可以很容易地将它转换成一个True单元格颜色不同的表,如甘特图

相关问题 更多 >