Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何在dataframe中为每个唯一id执行操作?_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 3.x 如何在dataframe中为每个唯一id执行操作?

Python 3.x 如何在dataframe中为每个唯一id执行操作?,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有一个数据框,看起来像这样: [id purchase_date] [1 1-1-19 ] [1 1-4-19 ] [2 1-3-19 ] [3 1-5-19 ] [1 1-10-19 ] [... ] 我想添加一列并应用一个条件,该条件将执行以下操作: 对于每个id,从今天的日期中减去最长日期。这意味着“非活动日”。生成的表应如下所示(注意,20显示3次,而用户1在此表中显示3次):

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

[id  purchase_date]
[1   1-1-19       ]
[1   1-4-19       ]
[2   1-3-19       ]
[3   1-5-19       ]
[1   1-10-19      ]
[...              ]
我想添加一列并应用一个条件,该条件将执行以下操作: 对于每个id,从今天的日期中减去最长日期。这意味着“非活动日”。生成的表应如下所示(注意,20显示3次,而用户1在此表中显示3次):

今天的日期=2019年1月30日(1-30-19)


在pandas中如何执行此操作?

您可以使用
groupby
transform

import pandas as pd

# Make sure that purchase date is a proper datetime column:
df['purchase_date'] = pd.to_datetime(df['purchase_date'])

# Define todays_date variable:
todays_date = pd.to_datetime("1-30-19")

# group by id, and transform the `purchase_date` column with an anonymous function
df['inactivity_days'] = df.groupby('id').purchase_date.transform(lambda x: (todays_date - x.max()).days)

In [7]: df                                                                                                                                                                                                         
Out[7]: 
   id purchase_date  inactivity_days
0   1    2019-01-01               20
1   1    2019-01-04               20
2   2    2019-01-03               27
3   3    2019-01-05               25
4   1    2019-01-10               20

您可以使用
groupby
transform

import pandas as pd

# Make sure that purchase date is a proper datetime column:
df['purchase_date'] = pd.to_datetime(df['purchase_date'])

# Define todays_date variable:
todays_date = pd.to_datetime("1-30-19")

# group by id, and transform the `purchase_date` column with an anonymous function
df['inactivity_days'] = df.groupby('id').purchase_date.transform(lambda x: (todays_date - x.max()).days)

In [7]: df                                                                                                                                                                                                         
Out[7]: 
   id purchase_date  inactivity_days
0   1    2019-01-01               20
1   1    2019-01-04               20
2   2    2019-01-03               27
3   3    2019-01-05               25
4   1    2019-01-10               20