解决以下问题的最佳方法是什么?
我有一个数据帧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 Date
和End Date
是日期时间
我需要对每天没有End 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组的结束日期应该是今天的#39; (让我们说'今天'是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
在这些操作结束时,我希望我的原始数据框显示所有原始行,但更新为end dates
。所以我做了以下几点:
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
这可以完成工作,但我必须认为有一个更少的“笨拙”。这样做的方法。
数据分析
提前致谢。
答案 0 :(得分:1)
您可以在同一步骤中找到空值并将其返回以进行分配:
df.loc[df['End Date'].isnull(), 'End Date'] = <<val>>
如果您还需要找到该组:
df.loc[(df['End Date'].isnull()) & (df['Group']==<<group>>), 'End Date'] = <<val>>
通过这种方式,您可以将所有内容保存在同一数据框中,这比分离df和重新合并更简洁。