Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较熊猫的相对开始日期_Python_Pandas_Time Series - Fatal编程技术网

Python 比较熊猫的相对开始日期

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

我想使用Pandas透视表的输出创建一个相对开始日期表。透视表的列是月,行是帐户,单元格是正在运行的操作总数。例如:

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