【发布时间】:2021-03-15 06:01:57
【问题描述】:
我有一个看起来像这样的 pandas 数据框,其中包含一个日期列和两个分类列:
Date Feature1 Feature2
2019-01-06 19:15:52+00:00 A K
2019-01-27 23:44:11+00:00 B H
2019-01-29 16:50:31+00:00 A K
2019-01-29 19:49:15+00:00 C J
... ... ...
我想将数据分组到例如 1 周的时间箱中,并计算每个时间箱中有多少 Feature1 AND Feature2 出现。我尝试了以下方法,首先将 Date 列转换为 datetime 索引,然后使用 Grouper 函数对每周存储桶进行分类,然后进行聚合:
df = df.set_index(['Date'])
df.index = pd.to_datetime(df.index)
df = df.sort_values(by='Date', ascending=True)
df.reset_index(inplace=True)
df = df.groupby([pd.Grouper(freq='W', key='Date'), 'Feature1'])['Feature2'].agg(
['size', 'sum']).rename(columns={'size': 'Feature1', 'sum': 'Feature2'}).reset_index()
但这只给了我一个在时间箱内正确总结的特征。我不确定我在这里做错了什么,有什么帮助吗?
编辑 1
这是生成我的数据的最小示例:
import pandas as pd
from datetime import datetime
import random
import time
import string
def random_date(seed):
random.seed(seed)
d = random.randint(1, int(time.time()))
return datetime.fromtimestamp(d).strftime('%Y-%m-%d %H:%M:%S')
df = pd.DataFrame(columns=['date', 'Feature1', 'Feature2'])
for i in range(1000):
date = random_date(i)
f1 = random.choice(string.ascii_letters)
f2 = random.choice(string.ascii_letters)
d = {'date': date, 'Feature1': f1, 'Feature2': f2}
df = df.append(d, ignore_index=True)
df = df.set_index(['date'])
df.index = pd.to_datetime(df.index)
df = df.sort_values(by='date',ascending=True)
【问题讨论】:
-
你能创建minimal, complete, and verifiable example 并添加预期的输出吗?
-
谢谢form mcve,但不明白exected输出看起来怎么样?需要像我的答案一样的两列的总和和大小吗?还是其他的?