我正在尝试建立一个数据框架,在其中我将建立一个时间表。在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相减?
答案 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