python - 在带有 groupby 的时间序列列上使用 Pandas .diff()

标签 python python-2.7 pandas

我有一个 CSV 客户购买文件,我将其读取到 Pandas Dataframe 中,顺序不分先后。我想为每次购买添加一列,并显示自上次购买以来经过了多少时间,按客户分组。我不确定差异在哪里,但它们太大了(即使是几秒钟)。

CSV:

Customer Id,Purchase Date
4543,1/1/2015
4543,2/5/2015
4543,3/15/2015
2322,1/1/2015
2322,3/1/2015
2322,2/1/2015

python :

import pandas as pd
import time
start = time.time()
data = pd.read_csv('data.csv', low_memory=False)
data = data.sort_values(by=['Customer Id', 'Purchase Date'])
data['Purchase Date'] = pd.to_datetime(data['Purchase Date'])
data['Purchase Difference'] = (data.groupby(['Customer Id'])['Purchase Date']
                         .diff()
                         .fillna('-')
                       )
print data

输出:

    Customer Id Purchase Date Purchase Difference
3         2322    2015-01-01                   -
5         2322    2015-02-01    2678400000000000
4         2322    2015-03-01    2419200000000000
0         4543    2015-01-01                   -
1         4543    2015-02-05    3024000000000000
2         4543    2015-03-15    328320000000000

期望的输出:

   Customer Id Purchase Date  Purchase Difference
3         2322    2015-01-01                  -
5         2322    2015-02-01              31 days
4         2322    2015-03-01              28 days
0         4543    2015-01-01                  -
1         4543    2015-02-05              35 days
2         4543    2015-03-15              38 days

最佳答案

一旦 Purchase Date 列转换为时间戳,您就可以将 diff 应用于它。

df['Purchase Date'] = pd.to_datetime(df['Purchase Date'])
df.sort_values(['Customer Id', 'Purchase Date'], inplace=True)    
df['Purchase Difference'] = \
    [str(n.days) + ' day' + 's' if n > pd.Timedelta(days=1) else '' if pd.notnull(n) else "" 
     for n in df.groupby('Customer Id', sort=False)['Purchase Date'].diff()]

>>> df
   Customer Id Purchase Date Purchase Difference
3         2322    2015-01-01                    
5         2322    2015-02-01             31 days
4         2322    2015-03-01             28 days
0         4543    2015-01-01                    
1         4543    2015-02-05             35 days
2         4543    2015-03-15             38 days
6         4543    2015-03-15                    

关于python - 在带有 groupby 的时间序列列上使用 Pandas .diff(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37033957/

相关文章:

用于矩阵的 python zip() 函数

python - 如何根据日期/月份将 pyspark 数据框中同一列上的行相乘?

python - 将 matplotlib 图保存到内存并放置在 tkinter Canvas 上

python - 如何在 python 中将二维数组的列转换为行?

python - 按日期分组数据并在 python 中找到平均值

Python/Pandas - 性能 - 尝试在全列操作中跳过 for 循环

Python Numpy 如何在具有多种数据类型的一维数组中搜索行

python - 在 Tkinter 标签文本的末尾显示三个点

python - 如何在Python中的函数之间传递变量

python - 从 pandas 数据框中的行与行比较中提取数据