我已经区分了当前周开始和日期周开始之间的差异,其中日期是日期列。这个差异是以天为单位的。当我尝试定义函数将这些天数转换为 1 周差异、2 周差异等时。
我收到的错误为:
Cannot compare type 'Timedelta' with type 'str'
请帮我解决这个问题。我担心我在定义函数时是否错了?这是定义函数的代码:
def check(diff):
for d in final_data['diff']:
if ((d > '0 days') and (d <= '7 days')):
weekdiff = 'OneWeekDiff'
elif ((d > '8 days') and (d <= '14 days')):
weekdiff = 'TwoWeekDiff'
else:
weekdiff = 'Current Week'
return weekdiff
为了找出两列之间的差异,我只需进行如下减法: Final_data['diff'] = Final_data['CurrentWeekStartDay'] - Final_data['InvoiceWeekstartDay']
打印(final_data['diff'] 0 14 天 1 14 天 2 14 天
最佳答案
您需要转换to_timedelta
字符串 0 天
、7 天
...:
然后我稍微修改了函数 - 删除循环和else
。您可以apply
DataFrame
列的函数:
def check(d):
weekdiff = 'Current Week'
if ((d > pd.to_timedelta('0 days')) and (d <= pd.to_timedelta('7 days'))):
weekdiff = 'OneWeekDiff'
elif ((d > pd.to_timedelta('8 days')) and (d <= pd.to_timedelta('14 days'))):
weekdiff = 'TwoWeekDiff'
return weekdiff
print (final_data['diff'].apply(check))
示例:
final_data = pd.DataFrame({'b': {0: pd.Timestamp('2016-01-13 00:00:00'),
1: pd.Timestamp('2016-01-05 00:00:00'),
2: pd.Timestamp('2016-01-03 00:00:00')},
'a': {0: pd.Timestamp('2016-01-01 00:00:00'),
1: pd.Timestamp('2016-01-02 00:00:00'),
2: pd.Timestamp('2016-01-03 00:00:00')},
'diff': {0: pd.Timedelta('12 days 00:00:00'),
1: pd.Timedelta('3 days 00:00:00'),
2: pd.Timedelta('0 days 00:00:00')}})
print (final_data)
a b diff
0 2016-01-01 2016-01-13 12 days
1 2016-01-02 2016-01-05 3 days
2 2016-01-03 2016-01-03 0 days
print (final_data['diff'].apply(check))
0 TwoWeekDiff
1 OneWeekDiff
2 Current Week
Name: diff, dtype: object
关于python - 如何将以天为单位的 timedelta 转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38691701/