例如,我有一个数据框:
df = pd.DataFrame({'Value_Bucket': [5, 5, 5, 10, 10, 10],
'DayofWeek': [1, 1, 3, 2, 4, 2],
'Hour_Bucket': [1, 5, 7, 4, 3, 12],
'Values': [1, 1.5, 2, 3, 5, 3]})
实际数据集相当大(5000行+)。如果“Value_Bucket”= 5,我希望在'Values'上执行函数,并且对于“DayofWeek”和“Hour_Bucket”的每个可能组合。
本质上,数据将被分组为24行(Hour_Bucket)和7列(DayofWeek)的表格,并且每个单元格都填充有函数的结果(例如,平均值)。我可以将groupby函数用于1个标准,有人可以解释我如何对两个条件进行分组并将结果制表到表格中吗?
答案 0 :(得分:2)
query
到子集groupby
unstack
df.query('Value_Bucket == 5').groupby(
['Hour_Bucket', 'DayofWeek']).Values.mean().unstack()
DayofWeek 1 3
Hour_Bucket
1 1.0 NaN
5 1.5 NaN
7 NaN 2.0
如果您想要使用零而不是NaN
df.query('Value_Bucket == 5').groupby(
['Hour_Bucket', 'DayofWeek']).Values.mean().unstack(fill_value=0)
DayofWeek 1 3
Hour_Bucket
1 1.0 0.0
5 1.5 0.0
7 0.0 2.0
答案 1 :(得分:1)
对于我来说,数据透视表似乎比groupby与disstack配对更自然,尽管他们完全相同。
pd.pivot_table(data=df.query('Value_Bucket == 5'),
index='Hour_Bucket',
columns='DayofWeek',
values='Values',
aggfunc='mean',
fill_value=0)
输出
DayofWeek 1 3
Hour_Bucket
1 1.0 0
5 1.5 0
7 0.0 2