比较分组变量中的两个日期

时间:2019-02-08 20:09:48

标签: python pandas datetime pandas-groupby date-comparison

我正在尝试比较两个日期,但出现错误“只能比较标记相同的Series对象” 我也尝试使用iloc和.values,因为使用此方法可以回答其他一些问题,但是使用该方法我会遇到其他各种错误。 我不确定该怎么办。问题是我写的地方:

 elif group[1]["dtstart"] <= endDate

下面是我的完整示例代码。

请注意,这不是我正在使用的实际数据,因此我试图使其非常相似。两者仍然会出现相同的错误(只能比较标记相同的Series对象),

但是,当我在本节中将此代码(带有假数据)中包括.value时,group[1]["dtstart"] <= endDate.values会出现错误:The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().当我在我得到的是真实数据错误:“长度必须匹配才能进行比较” 这就是为什么我尝试iloc但仍然没有成功的原因。我什至不确定是否要使用iloc或.values,并且当我包含其中的任何一个时,伪数据和真实数据不会产生相同的错误,但是仅保留所有内容,则在伪数据和真实数据中都会产生相同的错误真实的是

“只能比较标记相同的Series对象”

感谢您的帮助。谢谢!

import pandas as pd
from datetime import datetime
import numpy as np

pd.set_option('display.max_columns', None)
#Create a DataFrame
d = {
    'ID':[1,2,3,3,1,1,2,2,4,4],
   'dtstart':[pd.Timestamp('2018-01-01'), pd.Timestamp('2018-01-30'), pd.Timestamp('2018-03-01'), pd.Timestamp('2018-03-14'),
               pd.Timestamp('2018-04-08'), pd.Timestamp('2018-04-27'), pd.Timestamp('2018-07-03'), pd.Timestamp('2018-07-17'),pd.Timestamp('2018-07-17'),pd.Timestamp('2018-01-20')],
   'dtend':[pd.Timestamp('2018-01-06'), pd.Timestamp('2018-02-15'), pd.Timestamp('2018-03-05'), pd.Timestamp('2018-03-22'),
               pd.Timestamp('2018-04-15'), pd.Timestamp('2018-05-06'), pd.Timestamp('2018-07-07'), pd.Timestamp('2018-07-28'),pd.Timestamp('2018-01-18'),pd.Timestamp('2018-01-22')]}
df = pd.DataFrame(d)

grouped = df.groupby(['ID'])
grouped.apply(lambda _df: _df.sort_values(by=['dtstart']))
count=0
df_CE = pd.DataFrame(columns=['ID', 'dtstart', 'dtEnd'])
for group in grouped:
    months_enrolled=len(group)
    if count == 0:
        print("group[1][dtstart]===",group[1]["dtstart"])

        startDate = group[1]["dtstart"]
        endDate   = group[1]["dtend"] 
        count += 1
#    print("endDate==",TEST_endDate.dtypes)
    elif group[1]["dtstart"] <= endDate:
        print("yes")

1 个答案:

答案 0 :(得分:1)

您从未将grouped.apply(lambda _df: _df.sort_values(by=['dtstart']))设置为任何值。如果您想对其进行排序并保持其排序,则应将其更改为

grouped = grouped.apply(lambda _df: _df.sort_values(by=['dtstart']))

这使grouped成为多索引的DataFrame,因此您需要如此进行迭代。假设您不想这样做,则会因为比较两个长度不同的pd.Series而收到错误消息。我运行了您的代码,并在出现错误的行中对

(4,    ID      dtend    dtstart
8   4 2018-01-18 2018-07-17
9   4 2018-01-22 2018-01-20)
>>> g2
(2,    ID      dtend    dtstart
1   2 2018-02-15 2018-01-30
6   2 2018-07-07 2018-07-03
7   2 2018-07-28 2018-07-17)
相关问题