【发布时间】:2019-07-03 02:45:14
【问题描述】:
我正在尝试比较两个日期,但出现错误“只能比较标签相同的系列对象” 我也尝试使用 iloc 和 .values ,因为使用这种方法回答了一些其他问题,但使用它我得到了各种其他错误。 我不知道该怎么办。问题是我写的地方:
elif group[1]["dtstart"] <= endDate
以下是我的完整示例代码。
请注意,这不是我正在使用的实际数据,我试图使其非常相似。我仍然得到相同的错误(只能比较相同标签的系列对象),
但是当我在本节中包含此代码中的 .values(带有假数据)时,就像 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().当我在我得到的真实数据中的同一位置包含 .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