熊猫反击成为新专栏

时间:2020-07-28 20:05:47

标签: pandas dataframe counter

我正在尝试建立一个数据框架,在其中我将建立一个时间表。在X轴上,我有日期,在Y轴上,我有金额(如果有特定ID)。

这是我的尝试:

import pandas as pd
import numpy as np


file = ('test31.csv')

df = pd.read_csv(file)
df = df[['ID', 'Created Date', 'Finished Date']]

df.head()

Output:

ID        Created Date      Finished Date

XY11           2020-07-21          2020-07-23
AA12           2020-07-17          2020-07-28
AA12           2020-07-15          2020-07-20
AA12           2020-07-15          2020-07-23
XY11           2020-07-13          2020-07-22

现在我要计算在一个特定日期创建了多少个ID。

x = df.groupby(['ID', 'Created Date'])['Created Date'].size().to_frame('size1')
print(x)

Output:

ID             Created Date        size1

XY11           2020-07-21          1
XY11           2020-07-13          1

AA12           2020-07-15          2
AA12           2020-07-17          1

我在这里缺少计数器列,随着创建新ID的增加,计数器列应会增加。 在设法做到这一点之后,我将减去Finished Date计数器,并基于该计数器建立时间表。也许有一种更简单的方法,但这是我目前的计划。

想要的输出:


ID             Created Date        size1          counter

XY11           2020-07-21          1              1
XY11           2020-07-13          1              2
XY11           2020-08-14          5              7

AA12           2020-07-15          2              2
AA12           2020-07-17          1              3

编辑:

我可能必须按日期排序,但这在以后是个问题。

更新:

在社区的帮助下,我现在得到了:

x = df.groupby(['ID', 'Created Date'])['Created Date'].size().to_frame('size1')
y = df.groupby(['ID', 'Finished Date'])['Finished Date'].count().to_frame('size2')

x['counter1'] = x.groupby('ID').size1.cumsum()
y['counter2'] = y.groupby('ID').size2.cumsum()

print(x)
print(y)

x Output:

ID             Created Date        size1          counter1

XY11           2020-07-21          1              1
XY11           2020-07-13          1              2
XY11           2020-08-14          5              7

AA12           2020-07-15          2              2
AA12           2020-07-17          1              3


y Output

ID             Finished Date       size2          counter2

XY11           2020-07-28          1              1
XY11           2020-09-13          4              5
XY11           2020-08-14          1              6

AA12           2020-10-15          6              6
AA12           2020-11-17          2              8

如何仅在日期匹配的情况下将counter1与counter2相减?

1 个答案:

答案 0 :(得分:0)

这是您要找的吗?

x['counter'] = x.groupby('ID').size1.cumsum()
print(x)

输出

     ID Created Date  size1  counter
0  XY11   2020-07-21      1        1
1  XY11   2020-07-13      1        2
2  AA12   2020-07-15      2        2
3  AA12   2020-07-17      1        3