python - 使用 Python 将日程表转换为综合报告

标签 python pandas dataframe for-loop

我正在尝试将以下格式的时间表转换为报告格式。

目前数据存储如下:

Person Name    Jun 1    Jun 2    Jun 3   Jun 4   Jun 5   Jun 6   Jun 7   Jun 8   Jun 9   Jun 10   ...
John Smith       X        X        X       X       O       O       O       X       X       X      ...
Aaron Roberts    O        O        X       X       X       X       O       O       O       O      ...
Jess Lewis       O        O        O       O       X       X       X       X       X       X      ...
Edgar Blue       X        X        X       X       X       O       O       O       O       X      ...
Lara Irvin       X        X        O       O       O       O       X       X       X       X      ...

X 代表它们“开启”的日子,O 代表它们“关闭”的日子。

我想要的是运行一个 python 脚本,以这种格式的报告总结时间表:

Person Name          From:          To:
John Smith           Jun 1          Jun 4
John Smith           Jun 8          Jun 10
Aaron Roberts        Jun 3          Jun 6
Jess Lewis           Jun 5          Jun 10
Edgar Blue           Jun 1          Jun 5
Edgar Blue           Jun 10         Jun 13
Lara Irvin           Jun 1          Jun 2
Lara Irvin           Jun 7          Jun 10

我尝试的是创建一个唯一的名称列表

names = ["John Smith", "Aaron Roberts", "Jess Lewis", "Edgar Blue", "Lara Irvin"]

然后做

for name in names:
    df.iloc["Person Name"] == name

然后我不知道如何继续,我试图看看 i 位置是 X 还是 O,然后看看 i-1 位置是 X 还是 O

然后...

if i == "X" && i-1 == "O"

在另一个表的“发件人:”列中填充该标题日期

还有...

if == "O" && i-1 == "X"

在另一个表的“收件人:”列中填充该标题日期

然后使用嵌套 for 循环对所有“人名”和所有日期重复相同的过程。

预先感谢您的帮助。

最佳答案

这需要cumsum创建子组,然后我们将groupbyagg堆叠起来

df=df.set_index('PersonName')

s1=df.eq('O').cumsum(1).stack().reset_index()

s=s1[df.stack().ne('O').values].groupby(['PersonName',0])['level_1'].agg(['first','last']).reset_index(level=1,drop=True)

s
              first   last
PersonName                
AaronRoberts   Jun3   Jun6
EdgarBlue      Jun1   Jun5
EdgarBlue     Jun10  Jun10
JessLewis      Jun5  Jun10
JohnSmith      Jun1   Jun4
JohnSmith      Jun8  Jun10
LaraIrvin      Jun1   Jun2
LaraIrvin      Jun7  Jun10

关于python - 使用 Python 将日程表转换为综合报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61209145/

相关文章:

python - 将 emacs 组织模式表读入 python pandas 数据帧的优雅方式

python - 如何从源头构建?

c++ - apache thrift,序列化未签名

python - 具有多个记录路径的 json_normalize

python - Pandas - 将 CSV 读入数据框,其中一列具有不同数量的子列

Python - Pandas 数据框列交换

python - 使用单行代码合并两个具有不同索引的数据帧,同时保留主数据帧的索引

Pythonians : Is there a better way to code this in Python?

python - odoo (openerp) 中的字段错误?

python - 所有 Pandas 数据类型