我正在尝试按3个栏目,日期,时间和文章对数据框进行分组,并返回一个对象,其中我具有日期,时间和文章的组以及每个时间(小时)的每篇文章的计数。 这段代码可以解决分组问题,但是我无法弄清楚如何获得计数:
dfs.groupby([dfs['Dato'].dt.date,dfs['Tid'].dt.hour,dfs['Varenavn']])
所以这可能是我的输入:
01.01.2018 0901 Car
01.01.2018 0905 Car
01.01.2018 0945 Horse
01.01.2018 1005 Car
02.01.2018 0900 Horse
02.01.2018 0915 Horse
02.01.2018 1050 Car
02.01.2018 1055 Horse
想要的输出:
01.01.2018 09-10 Car 2
Horse 1
01.01.2018 10-11 Car 1
02.01.2018 09-10 Horse 2
02.01.2018 10-11 Car 1
Horse 1
我的总体目标是从包含每个已售出商品的数据框中,何时何地,何时何日每天每小时售出多少商品
答案 0 :(得分:1)
假设OG数据框中的列Dato
,Tid
和Varenavn
,请尝试以下操作:
df['datetime'] = df['Dato'] + str(' ') + df['Tid']
df['datetime'] = pd.to_datetime(df['datetime'], format = '%m.%d.%Y %H%M')
df.groupby([pd.Grouper(key = 'datetime', freq = 'H'), 'Varenavn'])['Varenavn'].count()
输出:
datetime Varenavn
2018-01-01 09:00:00 Car 2
Horse 1
2018-01-01 10:00:00 Car 1
2018-02-01 09:00:00 Horse 2
2018-02-01 10:00:00 Car 1
Horse 1
...隐式假定时间戳记中的小时是开始时间。您可以重新索引并使用日期时间来获取所需的格式。
答案 1 :(得分:1)
这是另一种方法:
n = 5
average = 0
for i in range(n):
numbers = eval(input('Please enter number ', (i+1) ,' of ', n ,' to average:',sep='',end=''))
average = average+numbers/n
完整示例:
df['datetime'] = pd.to_datetime(df['date'] + df['time'].astype(str), format='%m.%d.%Y%H%M')
grouper = df.datetime.dt.strftime('%m.%d.%Y %H-') + (df.datetime.dt.hour+1).astype(str)
dfout = df.groupby(grouper)['article'].value_counts().to_frame('count')
返回:
import pandas as pd
data = '''\
date time article
01.01.2018 901 Car
01.01.2018 905 Car
01.01.2018 945 Horse
01.01.2018 1005 Car
02.01.2018 900 Horse
02.01.2018 915 Horse
02.01.2018 1050 Car
02.01.2018 1055 Horse'''
fileobj = pd.compat.StringIO(data)
df = pd.read_csv(fileobj, sep='\s+')
df['datetime'] = pd.to_datetime(df['date'] + df['time'].astype(str), format='%m.%d.%Y%H%M')
grouper = df.datetime.dt.strftime('%m.%d.%Y %H-') + (df.datetime.dt.hour+1).astype(str)
dfout = df.groupby(grouper)['article'].value_counts().to_frame('count')
print(dfout)