将数据帧列从对象转换为时间增量并求和
Converting dataframe column from object to timedelta and summing
我有一个按月分离的 Pandas 数据框:
months = [g for n, g in df.groupby(pd.Grouper(key='DATE',freq='M'))]
然后我每个月都在一个名为 PARTS RUN
的列中对整数求和。
parts_run_month_sum = months[month]['PARTS RUN'].sum()
一切正常。我需要做的最后一件事是将列 HOURS RUN (HR:MIN)
中的小时数加在一起。此列是对象数据类型。数据本身是时间增量格式,而不是日期时间。格式是这样的:02:11:40
,即hours:minutes:seconds.
如果我 运行 下面的代码行,它会打印与每个月恰好有的行数相关的正确索引号:
for run_time in range(len(months[month]['HOURS RUN (HR:MIN)'])):
print(run_time)
但是,如果我尝试自己获取时间线,我会收到一个 KeyError: 0
,尽管在上面的示例中返回的每个月都有一个 0 键。
for run_time in range(len(months[month]['HOURS RUN (HR:MIN)'])):
print(months[month]['HOURS RUN (HR:MIN)'][run_time])
我实际上要寻找的是如何对时间列求和,但因为它们是对象,所以我无法执行此操作。
如何将格式为 hours:minutes:seconds
的列转换为 timedelta 并对时间求和?
我认为你需要:
df['HOURS RUN (HR:MIN)'] = pd.to_timedelta(df['HOURS RUN (HR:MIN)'])
#if values are times
df['HOURS RUN (HR:MIN)'] = pd.to_timedelta(df['HOURS RUN (HR:MIN)'].astype(str))
我认为您的解决方案是可行的 sum
:
df1 = df.groupby(pd.Grouper(key='DATE',freq='M'))['HOURS RUN (HR:MIN)'].sum()
我有一个按月分离的 Pandas 数据框:
months = [g for n, g in df.groupby(pd.Grouper(key='DATE',freq='M'))]
然后我每个月都在一个名为 PARTS RUN
的列中对整数求和。
parts_run_month_sum = months[month]['PARTS RUN'].sum()
一切正常。我需要做的最后一件事是将列 HOURS RUN (HR:MIN)
中的小时数加在一起。此列是对象数据类型。数据本身是时间增量格式,而不是日期时间。格式是这样的:02:11:40
,即hours:minutes:seconds.
如果我 运行 下面的代码行,它会打印与每个月恰好有的行数相关的正确索引号:
for run_time in range(len(months[month]['HOURS RUN (HR:MIN)'])):
print(run_time)
但是,如果我尝试自己获取时间线,我会收到一个 KeyError: 0
,尽管在上面的示例中返回的每个月都有一个 0 键。
for run_time in range(len(months[month]['HOURS RUN (HR:MIN)'])):
print(months[month]['HOURS RUN (HR:MIN)'][run_time])
我实际上要寻找的是如何对时间列求和,但因为它们是对象,所以我无法执行此操作。
如何将格式为 hours:minutes:seconds
的列转换为 timedelta 并对时间求和?
我认为你需要:
df['HOURS RUN (HR:MIN)'] = pd.to_timedelta(df['HOURS RUN (HR:MIN)'])
#if values are times
df['HOURS RUN (HR:MIN)'] = pd.to_timedelta(df['HOURS RUN (HR:MIN)'].astype(str))
我认为您的解决方案是可行的 sum
:
df1 = df.groupby(pd.Grouper(key='DATE',freq='M'))['HOURS RUN (HR:MIN)'].sum()