Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫中优雅的数据帧操作_Python_Pandas - Fatal编程技术网

Python 熊猫中优雅的数据帧操作

Python 熊猫中优雅的数据帧操作,python,pandas,Python,Pandas,解决以下问题的最佳方法是什么 我有一个数据帧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 组是一个字符串,开始日期和结束日期是日期时间 我需要每天对没有结束日期的组执行一些操作。如果这些操作规定组的结束日期为该天,我将用

解决以下问题的最佳方法是什么

我有一个数据帧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
是一个字符串,
开始日期
结束日期
是日期时间

我需要每天对没有结束日期的组执行一些操作。如果这些操作规定组的结束日期为该天,我将用日期替换
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
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
以及:

然后我做手术。比如说,如果我确定A组的结束日期应为“今天”(假设“今天”为2017年9月10日),我会这样做

因此,我有以下几点:

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)
这给了我:

df_closed

Group    Start Date    End Date
A         8/15/2017     8/30/2017
C         8/07/2017     8/14/2017
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(),'End Date']=
如果您还需要查找组,请执行以下操作:

df.loc[(df['End Date'].isnull()) & (df['Group']==<<group>>), 'End Date'] = <<val>>
df.loc[(df['End Date'].isnull())和(df['Group']==),'End Date']=
通过这种方式,您可以将所有内容保持在相同的数据帧中,这比分离df并重新合并要简单。

您可以
df.loc[(df['Group']='A')&df['End Date'].isnull(),'End Date']=今天