Python 比较熊猫的相对开始日期
我想使用Pandas透视表的输出创建一个相对开始日期表。透视表的列是月,行是帐户,单元格是正在运行的操作总数。例如:Python 比较熊猫的相对开始日期,python,pandas,time-series,Python,Pandas,Time Series,我想使用Pandas透视表的输出创建一个相对开始日期表。透视表的列是月,行是帐户,单元格是正在运行的操作总数。例如: Date1 Date2 Date3 Date4 1 1 2 3 N/A 1 2 2 第一行的第一个实例是Date1。 第二行的第一个实例是Date2 新表的格式将使列现在是相对于第一个操作的月份,并且看起来像: FirstMonth Sec
Date1 Date2 Date3 Date4
1 1 2 3
N/A 1 2 2
第一行的第一个实例是Date1。
第二行的第一个实例是Date2
新表的格式将使列现在是相对于第一个操作的月份,并且看起来像:
FirstMonth SecondMonth ThirdMonth
1 1 2
1 2 2
在pandas中,创建初始数据透视表是一项艰巨的任务,我很好奇是否有任何关于如何开发相对起点表的建议。谢谢大家! 首先,确保数据帧列是实际的日期时间值。然后,您可以运行以下操作来计算每个日期的操作总和,然后按月对这些值进行分组,并计算相应的每月总和:
>>>df
2019-01-01 2019-01-02 2019-02-01
Row
0 4 22 40
1 22 67 86
2 72 27 25
3 0 26 60
4 44 62 32
5 73 86 81
6 81 17 58
7 88 29 21
如果你想让它反映你在上面所做的:
>>> out = df.sum().groupby(df.sum().index.month).sum().to_frame().T
>>> out.columns = [datetime.datetime.strftime(datetime.datetime.strptime(str(x),'%m'),'%B') for x in out.columns]
>>> out
January February
0 720 403
如果我误解了你的意思,你想通过记录/行来说明:
>>> df.T.groupby(df.T.index.month).sum().T
1 2
Row
0 26 40
1 89 86
2 99 25
3 26 60
4 106 32
5 159 81
6 98 58
7 117 21
如上所述重命名列。首先,确保数据帧列是实际的日期时间值。然后,您可以运行以下操作来计算每个日期的操作总和,然后按月对这些值进行分组,并计算相应的每月总和:
>>>df
2019-01-01 2019-01-02 2019-02-01
Row
0 4 22 40
1 22 67 86
2 72 27 25
3 0 26 60
4 44 62 32
5 73 86 81
6 81 17 58
7 88 29 21
如果你想让它反映你在上面所做的:
>>> out = df.sum().groupby(df.sum().index.month).sum().to_frame().T
>>> out.columns = [datetime.datetime.strftime(datetime.datetime.strptime(str(x),'%m'),'%B') for x in out.columns]
>>> out
January February
0 720 403
如果我误解了你的意思,你想通过记录/行来说明:
>>> df.T.groupby(df.T.index.month).sum().T
1 2
Row
0 26 40
1 89 86
2 99 25
3 26 60
4 106 32
5 159 81
6 98 58
7 117 21
如上所述重命名列。诀窍是将.apply()与dropna()结合使用
诀窍是将.apply()与dropna()结合使用
df.diff(axis=1)
?所以从第一个表到第二个表是一个问题?@ALollz,正确。我现在有第一张表,我想把它转换成第二张表。我想我能想到的任何东西基本上都是它的副本。应用sorted
是一个简洁但缓慢的解决方案。否则,您可以使用justify
解决方案,类似于:pd.DataFrame(justify(df.to_numpy(),invalid_val='N/A'))
df.diff(axis=1)
?所以从第一个表到第二个表是问题?@ALollz,正确。我现在有第一张表,我想把它转换成第二张表。我想我能想到的任何东西基本上都是它的副本。应用sorted
是一个简洁但缓慢的解决方案。否则,您可以使用justify
解决方案,类似于:pd.DataFrame(justify(df.to_numpy(),invalid_val='N/A'))
因此,我实际上是在尝试保持原始数据未聚合。最终状态是,我将有一个表,其中每个列都是第一个月/第二个月/第三个月,因此我可以查看每个帐户在相同相对时间段内的趋势(即,在month1和month2之间,帐户增加活动。month2到month3减少活动,等等)。您看到底部的更新了吗?我相信它完成了你想要的,按行给出了每月的总数df.T.groupby(df.T.index.month).sum().T
因此,我实际上是在试图保持原始数据未聚合。最终状态是,我将有一个表,其中每个列都是第一个月/第二个月/第三个月,因此我可以查看每个帐户在相同相对时间段内的趋势(即,在month1和month2之间,帐户增加活动。month2到month3减少活动,等等)。您看到底部的更新了吗?我相信它完成了你想要的,按行给出了每月的总数<代码>df.T.groupby(df.T.index.month).sum().T