Python 熊猫分组、累计总和和分类图
具有数据帧的:Python 熊猫分组、累计总和和分类图,python,pandas,dataframe,group-by,Python,Pandas,Dataframe,Group By,具有数据帧的: date path size 0 2019-05-10 /bar/A 3 1 2019-05-10 /bar/B 7 2 2019-05-10 /bar/C 2 3 2019-05-14 /bar/A 4 4 2019-05-14 /bar/B 8 5 2019-05-14 /bar/C 23 6 2019-05-18 /bar/A 11 7 2019-05-18 /bar/B 75 8
date path size
0 2019-05-10 /bar/A 3
1 2019-05-10 /bar/B 7
2 2019-05-10 /bar/C 2
3 2019-05-14 /bar/A 4
4 2019-05-14 /bar/B 8
5 2019-05-14 /bar/C 23
6 2019-05-18 /bar/A 11
7 2019-05-18 /bar/B 75
8 2019-05-18 /bar/C 32
我想按路径分组,并返回每个日期的列大小的累计总和
看看这个答案:
简单的df.groupby[path][size].cumsum或df.groupby[path,date][size].cumsum将不起作用
最后,累积总和应按日期绘制,并按组着色,以指示尺寸随时间的累积增长
/bar/A /bar/B /bar/C
2019-05-10 3 7 2
2019-05-14 7 15 26
2019-05-18 18 90 58
如果没有seaborn或其他工具,是否有基于pandas的解决方案?我认为您可以通过旋转表格,然后应用累积总和来实现这一点
pivot = pd.pivot_table(df, values="size", index=["date"], columns=["path"], aggfunc=np.sum)
pivot = pivot.cumsum()
根据您的问题示例,查看结果:
df
Out[14]:
date path size
0 2019-05-10 /bar/A 3
1 2019-05-10 /bar/B 7
2 2019-05-10 /bar/C 2
3 2019-05-14 /bar/A 4
4 2019-05-14 /bar/B 8
5 2019-05-14 /bar/C 23
6 2019-05-18 /bar/A 11
7 2019-05-18 /bar/B 75
8 2019-05-18 /bar/C 32
pivot = pd.pivot_table(df, values="size", index=["date"], columns=["path"], aggfunc=np.sum)
pivot.cumsum()
Out[16]:
path /bar/A /bar/B /bar/C
date
2019-05-10 3 7 2
2019-05-14 7 15 25
2019-05-18 18 90 57
我认为你可以通过数据透视表,然后应用累积和来实现这一点
pivot = pd.pivot_table(df, values="size", index=["date"], columns=["path"], aggfunc=np.sum)
pivot = pivot.cumsum()
根据您的问题示例,查看结果:
df
Out[14]:
date path size
0 2019-05-10 /bar/A 3
1 2019-05-10 /bar/B 7
2 2019-05-10 /bar/C 2
3 2019-05-14 /bar/A 4
4 2019-05-14 /bar/B 8
5 2019-05-14 /bar/C 23
6 2019-05-18 /bar/A 11
7 2019-05-18 /bar/B 75
8 2019-05-18 /bar/C 32
pivot = pd.pivot_table(df, values="size", index=["date"], columns=["path"], aggfunc=np.sum)
pivot.cumsum()
Out[16]:
path /bar/A /bar/B /bar/C
date
2019-05-10 3 7 2
2019-05-14 7 15 25
2019-05-18 18 90 57
@不。这会把一切都弄平。这将是所有项目的累计总和。我想保持路径的明确性。在我的例子中,这是三个累积结果question@splash58说得好。添加了预期的输出。@Nope。这会把一切都弄平。这将是所有项目的累计总和。我想保持路径的明确性。在我的例子中,这是三个累积结果question@splash58说得好。添加了预期输出。关闭。诀窍是使用index=df.date.dt.month进行数据透视。那么,你是按月份分组,而不是按天分组,对吗?事实上,在我最初的帖子中,我已经将时间包括在小时/分钟/秒中。在这种情况下,这种方法是行不通的。那么,我错过了你原来的帖子。但请看我最后的编辑。根据您的示例,它按预期工作。但是如果你有日期时间,而不是日期,那么你可以决定只选择小时、天、月、年,这取决于你。但我认为我提供的解决方案正是你想要的:比罚款更多。谢谢,这很有效。作为一种解决方法:df[date].dt.date将足够通用。请关闭。诀窍是使用index=df.date.dt.month进行数据透视。那么,你是按月份分组,而不是按天分组,对吗?事实上,在我最初的帖子中,我已经将时间包括在小时/分钟/秒中。在这种情况下,这种方法是行不通的。那么,我错过了你原来的帖子。但请看我最后的编辑。根据您的示例,它按预期工作。但是如果你有日期时间,而不是日期,那么你可以决定只选择小时、天、月、年,这取决于你。但我认为我提供的解决方案正是你想要的:比罚款更多。谢谢,这很有效。作为一种解决方法:df[date].dt.date将足够通用。