gpt4 book ai didi

python - 我如何比较 pandas 中具有相同类别的两个日期列

转载 作者:行者123 更新时间:2023-12-01 01:34:14 26 4
gpt4 key购买 nike

我对 pandas 很陌生,抱歉没有多大意义。我有一种按类别进行 groupby 的感觉,但是我不确定如何在 groupby 中运行函数。

我想查找 Date1 中给定行的日期,并查看相同 ID 的任何日期(在 date2 中)是否在 7 天内。

我考虑过通过这样做来分割 date1 和 date2,但我不知道从哪里开始。

g1 = df[['Category', 'Date1']]

g2 = df[['Category', 'Date2']]

dif = pd.Timedelta(7, unit='D')
df['isDateWithin7Days'] = np.where((g1['Category'] == g2['Category'])(df['Date1'] > g2['Date2']-dif, True, False))

我收到此错误

ValueError: operands could not be broadcast together with shapes (50537,) (3,)

df1:

category        date1        date2      
blue 1/1/2018
blue 1/2/2018
blue 1/5/2018
blue 2/1/2018
green 1/3/2018
green 1/1/2018
red 12/1/2018
red 11/1/2018

预期结果:

category        date1        date2     isDateWithin7Days?      EarliestDate?
blue 1/1/2018 True 1/2/2018
blue 2/1/2018 False 0
green 1/3/2018 False 0
red 12/1/2018 False 0

最佳答案

IIUC,您正在尝试在 date2 列中查找距 categorydate1 的唯一组合 7 天内的日期- 如果找到任何此类日期,此代码将返回 True,否则返回 False:

df['date1'] = pd.to_datetime(df['date1'], format = '%m-%d-%y')
df['date2'] = pd.to_datetime(df['date2'], format = '%m-%d-%y')

df1 = df.dropna(subset = ['date1']).drop(columns = ['date2'])
df2 = df.dropna(subset = ['date2']).drop(columns = ['date1'])

df3 = df1.merge(df2, on = 'category')
df3['date2'].between(df3['date1'] - pd.Timedelta(days=7), df3['date1'] + pd.Timedelta(days=7))

df3['isDateWithin7Days?'] = df3['date2'].between(df3['date1'] - pd.Timedelta(days=7), df3['date1'] + pd.Timedelta(days=7))
df3 = df3.groupby(['category', 'date1'])['isDateWithin7Days?'].sum().reset_index()
df3['isDateWithin7Days?'] = np.where(df3['isDateWithin7Days?'] > 0, True, False)

输出:

  category      date1  isDateWithin7Days?
0 blue 2018-01-01 True
1 blue 2018-02-01 False
2 green 2018-01-03 False
3 red 2018-12-01 False

关于python - 我如何比较 pandas 中具有相同类别的两个日期列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52524978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com