【问题标题】:Pandas aggregation on timedelta and its behaviour关于 timedelta 的 Pandas 聚合及其行为
【发布时间】:2018-01-27 06:52:10
【问题描述】:

我正在努力对 timedelta 进行聚合,包括绘图。原始数据可在此处获得 本质上,数据有提交 (datetime) 、已解决 (datetime) 、 PauseTime (timedelta) 和 Resolved-Submit-Pause (这是实际解决时间)

click here for data

test_df = pd.read_csv('test_df.csv')

#convert to date time stamps
test_df[['Submit','Resolved']] = test_df[['Submit','Resolved']].apply(pd.to_datetime)

#CONVERT PauseTime and Resolved-Submit-Pausetime to Timedelta

test_df['PauseTime']=pd.to_timedelta(test_df['PauseTime'])
test_df['Resolved-Submit-Pausetime'] = pd.to_timedelta(test_df['Resolved-Submit-Pausetime'])

我正在尝试汇总“已解决”的每一天的平均值

test_df.groupby([pd.Grouper(key='Resolved', freq='D')])['Resolved-Submit-Pausetime'].mean()

这给了我一个错误 - 'DataError: No numeric types to aggregate'

1) 我如何聚合 mean 。

2) 还有一些绘制平均解决时间趋势的指导(x 轴将包含所有日期和 y 轴 agg mean timedelta of 'Resolved-Submit-Pausetime')

【问题讨论】:

  • 我能够得到 test_df.groupby([pd.Grouper(key='Resolved', freq='D')])['Resolved-Submit-Pausetime'].describe() 工作我的熊猫版本是'0.20.3'

标签: python pandas time-series timeserieschart


【解决方案1】:

使用此步骤将您的时间增量列转换为秒:

test_df['Resolved-Submit-Pausetime'] = test_df['Resolved-Submit-Pausetime'].astype('timedelta64[s]')

0      1234.0
1     27380.0
2     33017.0
3      5454.0
4       433.0
5      2302.0
6     21753.0
7      3405.0
8      4779.0
9      3974.0
10     3389.0
11      114.0
Name: Resolved-Submit-Pausetime, dtype: float64

然后运行你的 groupby 语句来计算平均值:

test_df.groupby([pd.Grouper(key='Resolved', freq='D')])['Resolved-Submit-Pausetime'].mean()

Resolved
2017-04-01    20543.666667
2017-04-02     7485.500000
2017-04-03     3132.200000
Name: Resolved-Submit-Pausetime, dtype: float64

您可以使用 Pandas 内置的绘图工具来快速绘制相对于 groupby 日期的平均时间:

test_df.groupby([pd.Grouper(key='Resolved', freq='D')])['Resolved-Submit-Pausetime'].mean().plot()

【讨论】:

  • 感谢您的帮助。我们如何将轴设为 hh:mm 格式?
猜你喜欢
  • 2020-05-03
  • 1970-01-01
  • 2017-12-27
  • 2022-01-24
  • 2019-09-18
  • 1970-01-01
  • 2020-02-06
  • 2015-08-17
  • 2014-05-06
相关资源
最近更新 更多