gpt4 book ai didi

python - Pandas 中优雅的数据框操作

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:07 25 4
gpt4 key购买 nike

解决以下问题的最Pythonic/优雅的方法是什么?

我有一个数据框 df:

Group    Start Date    End Date
A 8/15/2017 8/30/2017
B 8/20/2017 NaT
C 8/07/2017 8/14/2017
A 9/07/2017 NaT

Group 是一个字符串,Start DateEnd Date 是日期时间

我需要每天对没有结束日期的组执行一些操作。如果这些操作规定组的结束日期是在这一天,我会将 NaT 替换为该日期。

我能想到的唯一方法如下:

import pandas as pd

df_closed = df[pd.notnull(df['End_Date'])]
df_open = df[pd.isnull(df['End_Date'])]

这给了我:

df_closed

Group Start Date End Date
A 8/15/2017 8/30/2017
C 8/07/2017 8/14/2017

和:

df_open

Group Start Date End Date
B 8/20/2017 NaT
A 9/07/2017 NaT

然后我执行我的操作。比如说,如果我确定 A 组的结束日期应该是“今天”(假设“今天”是 9/10/2017),我会这样做

df_open.loc['A','End Date'] = 9/10/2017 

所以我有以下内容:

df_open

Group Start Date End Date
B 8/20/2017 NaT
A 9/07/2017 9/10/2017

在这些操作结束时,我希望原始数据框显示所有原始行,但具有更新的结束日期。所以我执行以下操作:

df = df_closed.append(df_open)

这给了我:

Group    Start Date    End Date
A 8/15/2017 8/30/2017
B 8/20/2017 NaT
C 8/07/2017 8/14/2017
A 9/07/2017 9/10/2017

这可以完成工作,但我必须认为有一种不那么“笨拙”的方法来做到这一点。

见解?

提前致谢。

最佳答案

您可以找到空值并在同一步骤中返回它们以进行赋值:

df.loc[df['End Date'].isnull(), 'End Date'] = <<val>>

如果您还需要找到该组:

df.loc[(df['End Date'].isnull()) & (df['Group']==<<group>>), 'End Date'] = <<val>>

通过这种方式,您可以将所有内容保留在同一个数据框中,这比分离 df 并重新合并要简单。

关于python - Pandas 中优雅的数据框操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46849799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com