【问题标题】:Pandas counter as a new column熊猫计数器作为新列
【发布时间】: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?

【问题讨论】:

    标签: pandas dataframe counter


    【解决方案1】:

    这就是你要找的吗?

    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
    

    【讨论】:

    • 是的,这就是我想要的!现在我只需要弄清楚如何用 Finished Date 计数器进行减法。我不能逐行减去,但只能在日期匹配的地方减去。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2021-09-22
    相关资源
    最近更新 更多