【问题标题】:Comparing two dates in grouped variable比较分组变量中的两个日期
【发布时间】:2019-07-03 02:45:14
【问题描述】:

我正在尝试比较两个日期,但出现错误“只能比较标签相同的系列对象” 我也尝试使用 iloc 和 .values ,因为使用这种方法回答了一些其他问题,但使用它我得到了各种其他错误。 我不知道该怎么办。问题是我写的地方:

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

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

请注意,这不是我正在使用的实际数据,我试图使其非常相似。我仍然得到相同的错误(只能比较相同标签的系列对象),

但是当我在本节中包含此代码中的 .values(带有假数据)时,就像 group[1]["dtstart"] &lt;= endDate.values 我得到错误:The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().当我在我得到的真实数据中的同一位置包含 .values 时错误:“长度必须匹配才能比较” 这就是为什么我尝试了 iloc 但仍然没有成功。我什至不确定 iloc 或 .values 是否是要走的路,当我包含任何一个时,假数据和真实数据都不会产生相同的错误,但只是保持一切原样会在假数据和假数据中产生相同的错误真实的是

“只能比较标签相同的系列对象”

感谢任何帮助。谢谢!

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")

【问题讨论】:

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


    【解决方案1】:

    您永远不会将grouped.apply(lambda _df: _df.sort_values(by=['dtstart'])) 设置为任何东西。如果您想对其进行排序并保持排序,那么您应该将其更改为

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

    这使得grouped 成为一个多索引数据帧,因此您需要进行迭代。假设你不想这样做,你会得到一个错误,因为你正在比较两个不同长度的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)
    

    【讨论】:

      猜你喜欢
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多