我试图按 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
我的总体目标是从包含每件已售商品的数据框中找出每天每小时售出的商品数量、销售时间和日期
最佳答案
这是另一种方法:
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)
返回:
count
datetime article
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
关于python - Pandas 数据框,将 3 列分组并计算第三列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52807109/