【发布时间】:2020-07-28 20:05:47
【问题描述】:
我正在尝试构建一个数据框,我将在其中构建一个时间线图。 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
如何仅在日期匹配的地方用 counter2 减去 counter1?
【问题讨论】: