如何计算 python 中特定 ID 的平均日期间隔?
How to Calculate mean gap between dates for a particular id in python?
我的输入数据框是这样的:
这里对于每个公司,我们可以有多个 salesid,每个 salesid 都有唯一的创建日期。
CompanyName Salesid Create Date
ABC 1 1-1-2020
ABC 22 4-1-2020
ABC 3 15-1-2020
ABC 4 10-1-2020
XYZ 34 19-2-2020
XYZ 56 23-2-2020
XYZ 23 11-2-2020
XYZ 87 27-2-2020
XYZ 101 5-2-2020
我想计算每家公司的平均创造差距:
我期待这种格式的输出:
Name Mean_createdate_gap
ABC 4.66
XYZ 5.5
解释:
ABC => (3+6+5)/3 = 4.66 (cumulative diff between dates)
XYZ => (6+8+4+4)/4 = 5.5
首先,我们可能需要对数据进行排序,然后按公司名称分组。我不确定我应该如何实施它。
将 Create
列转换为日期时间
df['Create'] = pd.to_datetime(df['Create'], format='%d-%m-%Y')
按此列排序
df = df.sort_values(by=['Create'])
使用累积差分平均值进行 groupby 聚合
df.groupby('CompanyName')['Create'].agg(lambda x: x.diff().abs().mean())
CompanyName
ABC 4 days 16:00:00
XYZ 5 days 12:00:00
Name: Create, dtype: timedelta64[ns]
给你:
df['Create Date'] = pd.to_datetime(df['Create Date'], format='%d-%m-%Y')
res = df.sort_values(by='Create Date')\
.groupby('CompanyName', sort=False)['Create Date']\
.agg(lambda cd : cd.diff().map(lambda dt: dt.days).mean()).reset_index()\
.rename(columns={'CompanyName': 'Name', 'Create Date': 'Mean_createdate_gap'})
print(res)
输出
Name Mean_createdate_gap
0 ABC 4.666667
1 XYZ 5.500000
我的输入数据框是这样的: 这里对于每个公司,我们可以有多个 salesid,每个 salesid 都有唯一的创建日期。
CompanyName Salesid Create Date
ABC 1 1-1-2020
ABC 22 4-1-2020
ABC 3 15-1-2020
ABC 4 10-1-2020
XYZ 34 19-2-2020
XYZ 56 23-2-2020
XYZ 23 11-2-2020
XYZ 87 27-2-2020
XYZ 101 5-2-2020
我想计算每家公司的平均创造差距: 我期待这种格式的输出:
Name Mean_createdate_gap
ABC 4.66
XYZ 5.5
解释:
ABC => (3+6+5)/3 = 4.66 (cumulative diff between dates)
XYZ => (6+8+4+4)/4 = 5.5
首先,我们可能需要对数据进行排序,然后按公司名称分组。我不确定我应该如何实施它。
将 Create
列转换为日期时间
df['Create'] = pd.to_datetime(df['Create'], format='%d-%m-%Y')
按此列排序
df = df.sort_values(by=['Create'])
使用累积差分平均值进行 groupby 聚合
df.groupby('CompanyName')['Create'].agg(lambda x: x.diff().abs().mean())
CompanyName
ABC 4 days 16:00:00
XYZ 5 days 12:00:00
Name: Create, dtype: timedelta64[ns]
给你:
df['Create Date'] = pd.to_datetime(df['Create Date'], format='%d-%m-%Y')
res = df.sort_values(by='Create Date')\
.groupby('CompanyName', sort=False)['Create Date']\
.agg(lambda cd : cd.diff().map(lambda dt: dt.days).mean()).reset_index()\
.rename(columns={'CompanyName': 'Name', 'Create Date': 'Mean_createdate_gap'})
print(res)
输出
Name Mean_createdate_gap
0 ABC 4.666667
1 XYZ 5.500000