У меня есть CSV-файл я импортируемый как панд dataframe, который выглядит следующим образом:Создать новый столбец в панде dataframe на основе того, появляется значение в строке в dataframe
TripId, DeviceId, StartDate, EndDate
817d0e7, dbf69e23, 2015-04-18T13:54:27.000Z, 2015-04-18T14:59:06.000Z
817d0f5, fkri449g, 2015-04-18T13:59:21.000Z, 2015-04-18T14:50:56.000Z
8145g5g, dbf69e23, 2015-04-18T15:12:26.000Z, 2015-04-18T16:21:04.000Z
4jhbfu4, fkigit95, 2015-04-18T14:23:40.000Z, 2015-04-18T14:59:38.000Z
8145g66, dbf69e23, 2015-04-20T11:20:24.000Z, 2015-04-20T16:22:41.000Z
...
Я хочу, чтобы добавить новый столбец со значением индикатора на основе того, появляется ли DeviceId в моем фреймворке данных, после 1-го StartDate после текущего EndDate. Так что мой новый dataframe должен выглядеть следующим образом:
TripId, DeviceId, StartDate, EndDate, newcol
817d0e7, dbf69e23, 2015-04-18T13:54:27.000Z, 2015-04-18T14:59:06.000Z, 1
817d0f5, fkri449g, 2015-04-18T13:59:21.000Z, 2015-04-18T14:50:56.000Z, 0
8145g5g, dbf69e23, 2015-04-18T15:12:26.000Z, 2015-04-18T16:21:04.000Z, 0
4jhbfu4, fkigit95, 2015-04-18T14:23:40.000Z, 2015-04-18T14:59:38.000Z, 0
8145g66, dbf69e23, 2015-04-20T11:20:24.000Z, 2015-04-20T16:22:41.000Z, 0
...
Я начал писать код, но я не уверен, как поступить.
df['newcol'] = np.where(df['DeviceId'].isin(df['DeviceId']) and , 1, 0)
Одна проблема заключается в том, что я не знаю, как найти идентификатор устройства в dataframe за исключением текущей строки, а другой в том, что я не знаю, как решить этот вопрос времени.
EDIT: Я работаю над этим немного, и мой новый код теперь:
df['UniqueId'] = range(0, 14571, 1)
df['StartDate'] = pd.to_datetime(df['StartDate'])
df['EndDate'] = pd.to_datetime(df['EndDate'])
df2 = df.loc[df.duplicated(subset=['DeviceId'],keep=False)]
#Returns list of trips with repeated deviceid
DeviceIds = df2['DeviceId'].tolist()
DeviceIds = list(set(DeviceIds))
for ID in DeviceIds:
temp = df2.loc[df2['DeviceId'] == ID]
temp.sort_values(by='StartDate')
temp['PreviousEnd'] = temp['EndDate'].shift(periods=1)
temp['Difference'] = temp['StartDate'] - temp['PreviousEnd']
temp['Difference'] = [1 if x < pd.Timedelta('1H')
else 0 for x in temp['Difference']]
temp = temp[['UniqueId','Difference']]
df.join(temp, on='UniqueId', how='left',rsuffix='2')
Чем она создает правильную временную dataframe, но я не могу присоединиться к значениям в Difference к первоначальному dataframe
Нет проблем, я пытаюсь добавить комментарий к моему ответу. Но если я не знаю желаемого результата, я не могу проверить, является ли мое решение тем, что вы хотите. – jezrael
также, возможно, необходимо сравнить с значением 'min', а не' max' – jezrael