按小时值对“时间”列进行分组

时间:2019-04-13 11:06:56

标签: python pandas

我有一个带有H:M:S格式的Time列的列

ColA    Time       Amount
a       10:32:01      10
b       09:10:56      10   
c       13:43:11      10
d       10:05:00      10
e       09:35:30      10

我只关心小时值,所以我想得到一个如下表:

Time       Amount
10:00:00      20
09:00:00      20   
13:00:00      10

我正在这样做:

df.groupby('Time')['Amount'].sum()

但这显然将精确匹配的Time值分组。我只需要按小时分组即可。

2 个答案:

答案 0 :(得分:2)

您可以使用列Time作为索引,事情变得很简单:

import pandas as pd

df = pd.DataFrame({"ColA":["a", "b", "c", "d", "e"],
                  "Time":["10:32:01", "09:10:56", "13:43:11", "10:05:00", "09:35:30"],
                  "Amount":[10,10,10,10,10]})

df['Time'] = pd.to_datetime(df['Time'])
df.set_index('Time', inplace=True)

df.groupby(df.index.hour).sum()

您会得到:

    Amount
Time    
9   20
10  20
13  10

答案 1 :(得分:0)

我喜欢@sentence的答案,但是与此同时,我发现我可以做到以下几点:

df.Time = [hour.split(':')[0] for hour in df.Time]

它适用于我的情况,但是我不知道我需要做其他事情有什么影响。