python - 计算属于 Pandas 时期的行

标签 python pandas

我有一个看起来像这样的数据框

customer  Start_date  End_date
100       2016-06-01  2018-01-01
101       2017-06-01  2019-01-01
102       2016-04-01  2017-04-01
103       2015-06-03  2016-01-01
104       2016-06-01  2018-01-01

现在我想创建一个带有周期索引的数据框,该索引具有一个列,其中包含每个周期的客户数量,如下所示:
Period    Customers
2017-01   3
2017-02   5
2017-03   8
2017-04   9

我已经编写了一个自定义的 for 循环来执行此操作,但效率非常低。必须有一种更快的方法来使用 Pandas 功能来完成这项工作。任何帮助是极大的赞赏!

最佳答案

首先,确保日期没问题:

df.Start_date = pd.to_datetime(df.Start_date)
df.End_date = pd.to_datetime(df.End_date)

创建一个虚拟列,并使用它来合并所有期间:
df['dummy'] = 1
merged = pd.merge(
    df,
    pd.DataFrame({'Period': pd.date_range(df.Start_date.min(), df.End_date.max(), freq='M'), 'dummy': 1}),
    how='outer')

保留期间位于开始日期和结束日期之间的所有行:
merged = merged[(merged.Start_date <= merged.Period) & (merged.End_date >= merged.Period)]

现在计算每个时期的客户:
>>> merged.customer.groupby(merged.Period).nunique()
Period
2015-06-30    1
2015-07-31    1
2015-08-31    1
2015-09-30    1
2015-10-31    1
2015-11-30    1
2015-12-31    1
2016-04-30    1
2016-05-31    1
2016-06-30    3
2016-07-31    3
2016-08-31    3
2016-09-30    3
2016-10-31    3
...

关于python - 计算属于 Pandas 时期的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50308794/

相关文章:

Python 安装程序未使用 pkg-config 找到正确安装的模块

python - 如何将 numpy bool 数组打包成一串位?

python - 使用 Xlib 在 python 中获取窗口位置和大小

Python数据框获取每行最后一个非空列的值

python - 从字符串 [Python] 创建多级字典

python - 在 Python 字典中交换键和值(包含列表)

python - 如何将 .agg 应用于数据框中的前 n 项

python - 在 pandas dataframe 中随机引入 NaN 值

python - 我无法使用 pip 安装任何软件包

python - 如何从 Pandas 字典中删除包含 None 的行?