Python 2.7 如何根据熊猫中两列的时差创建新列?
我有一个包含时间x和时间y的数据帧,格式如下:Python 2.7 如何根据熊猫中两列的时差创建新列?,python-2.7,pandas,dataframe,Python 2.7,Pandas,Dataframe,我有一个包含时间x和时间y的数据帧,格式如下: # 2015-10-01 23:59:59.997 %Y-%m-%d %H:%M:%S.%f 我不能只是: df['TimeDiff'] = datetime.strptime(df['Time_x'], '%Y-%m-%d %H:%M:%S.%f') - \ datetime.strptime(df['Time_y'], '%Y-%m-%d %H:%M:%S.%f') 我不能这样做以返回差异: # Defin
# 2015-10-01 23:59:59.997
%Y-%m-%d %H:%M:%S.%f
我不能只是:
df['TimeDiff'] = datetime.strptime(df['Time_x'], '%Y-%m-%d %H:%M:%S.%f') - \
datetime.strptime(df['Time_y'], '%Y-%m-%d %H:%M:%S.%f')
我不能这样做以返回差异:
# Defining a function to call with Pandas to apply()
def time_difference(a):
Time_x, Time_y = a
c = datetime.strptime(Time_x, '%Y-%m-%d %H:%M:%S.%f') - datetime.strptime(Time_y, '%Y-%m-%d %H:%M:%S.%f')
if c.days < 1:
if c.minute <= 15:
return c.minute
else:
return c.days
else:
None
# Creating a new column using my function.
# Error: “Too many values to unpack” Exception
df['TimeDiff'] = df[['Time_x', 'Time_y']].apply(time_difference)
#使用Pandas to apply()定义要调用的函数
def时间差(a):
时间x,时间y=a
c=datetime.strTime(时间x,%Y-%m-%d%H:%m:%S.%f')-datetime.strTime(时间Y,%Y-%m-%d%H:%m:%S.%f'))
如果c.天<1:
如果c.minuteIIUC,并且您正在从csv文件读取数据,如下所示:
time_x,time_y
2015-10-01 23:59:59.997,2015-10-01 23:58:59.997
2015-10-01 23:57:59.997,2015-10-01 23:59:59.997
我会阅读并解析日期:
df = pd.read_csv('yourfile.csv', parse_dates=['time_x','time_y'])
因此,您可以在以后申请:
df['TimeDiff'] = (df['time_x'] - df['time_y']).dt.seconds
返回:
time_x time_y TimeDiff
0 2015-10-01 23:59:59.997 2015-10-01 23:58:59.997 60
1 2015-10-01 23:57:59.997 2015-10-01 23:59:59.997 86280
通过这种方式,您可以指定所需的时间单位(dt.hour
,dt.minute
等)。仅供参考,我正在使用pd.read\u csv从csv读取数据。df.info()显示:Time_x和Time_y为对象。使用parse_dates后,我将Time_x视为datetime64[ns]。令人惊叹的!看起来不错!性能降低了(在我的df中有超过1M行),但我认为这是因为数据类型以日期和对象的形式存储了更多的数据。我还忘了提到时间x,时间y是pd.merge的结果。我分析了原始数据上的日期,合并自动复制了数据类型。我现在假设,我可以在merge上使用相同的时差逻辑来过滤以秒为单位的时差,以减少df大小。