ValueError:索引器与系列不兼容-正在尝试修复值



有人能帮我吗?

我需要处理以下数据帧:

在此处输入图像描述

SEGSTART列表示客户端调用的确切日期和时间。如果此客户端在过去7天内调用了两次或两次以上,则必须将其视为RECALL_7d(值=1(。否则,RECALL_7d值必须设置为0。

然而,RECALL_7d系列包含一些错误,因为有时它将客户端视为召回,有时则不然。我需要解决这个问题,我做到了:

  1. 首先,我创建了一个名为days的列,以计算第i行和第i+1:行的segstart之间的差异

    df[days']=df。SEGSTART.diff((.apply(lambda x:x/np.timedelta64(1,'D'((.fillna(0(.astype('t64'(

上面的代码向我返回了以下数据帧。正如可以看到的那样;错误";因为索引6的天数值应该是0。所以,为了解决这个问题,我试着这样做:

size = len(df['Client_id'])
df['days'] = np.nan
for i in range (size-1):
if df.loc[i+1, 'Client_id'] == df.loc[i, 'Client_id']:
df.loc[i+1, 'days'] = df.loc[:i+1, 'SEGSTART'].diff().apply(lambda x: x/np.timedelta64(1, 'D')).fillna(0).astype('int64')
else:
df.loc[i+1, 'days'] = 0

所以我得到了这个错误:

ValueError Traceback(最近一次调用最后一次(在里面5.6如果df.loc[i+1,'Client_id']==df.loc[i,'Client_i']:---->7 df.loc[i+1,'days']=df.loc[:i+1,'SEGSTART'].diff((.apply(lambda x:x/np.timedelta64(1,'D'((.fillna(0(.astype('t64'(8.9其他:

setitem中的~\anaconda3\lib\site packages\pandas\core\indexing.py(self,key,value(668669 iloc=self-if self-name==";iloc";其他self.obj.loc-->670 iloc_setitem_with_indexer(索引器,值(671672 def_validate_key(self,key,axis:int(:

_setitem_with_indexer中的~\anaconda3\lib\site packages\pandas\core\indexing.py(self,indexer,value(16401641如果不稳定(值,ABCSeries(:->1642值=自身_align_series(索引器,值(16431644 info_idx=索引器[ifo_axis]

_align_series中的~\anaconda3\lib\site packages\pandas\core\indexing.py(self、indexer、ser、multiindex_indexer(1952年返回ser.rendex(ax(_values1953->1954年提升ValueError("与系列不兼容的索引器"(19551956 def_align_frame(self,indexer,df:ABCDAFrame(:

ValueError:索引器与系列不兼容

在此处输入图像描述

DATA列上使用pd.to_datetime可以处理和比较日期和时间增量。然后,使用groupby('Client_id')并对DATA值进行排序(如果尚未排序(,这将简化每个单独客户端的调用计算。使用diff,将其与7天的时间段(pd.Timedelta(7, 'D')(进行比较,并定义这是否被视为召回。使用pd.concatsort_index()重建原始数据帧。

import pandas as pd
df = pd.read_csv('sample.csv')
df['DATA'] = pd.to_datetime(df['DATA'])
full_df = []
for n, g in df.groupby('Client_id'):
g['DATA'] = g.DATA.sort_values()
g['recall_7d'] = (g.DATA.diff() < pd.Timedelta(7, 'D')).astype(int)
full_df.append(g)
df_out = pd.concat(full_df).sort_index()
print(df_out)

df_out的输出

Client_id                 SEGSTART       DATA  recall_7d
0   38034991852  2021-01-08 20:15:05.000 2021-01-08          0
1   38034991852  2021-01-27 19:57:49.000 2021-01-27          0
2   38034991852  2021-01-27 19:37:33.000 2021-01-27          1
3   38034991852  2021-01-27 22:08:58.000 2021-01-27          1
4   38034991852  2021-02-01 10:45:00.000 2021-02-01          1
5   38034991852  2021-02-01 10:55:53.000 2021-02-01          1
6   11111111111  2021-02-03 10:15:05.000 2021-02-03          0
7   11111111111  2021-02-06 20:23:07.000 2021-02-06          1
8   11111111111  2021-02-07 08:54:05.000 2021-02-07          1
9   11111111111  2021-02-07 20:17:05.000 2021-02-07          1
10  11111111111  2021-02-13 16:25:00.000 2021-02-13          1
11  11111111111  2021-02-28 17:19:23.000 2021-02-28          0

最新更新