Я действительно не уверен, какую проблему вы хотите решить или какова ваша цель, но то, что вы говорите, вы хотите сделать, может быть сделано.Но вам уже дан ответ на вопрос, поэтому я не уверен, где вы застряли.
Давайте возьмем ваше первое утверждение:
Здесь у меня естьнабор данных с датой, временем и одним входным столбцом.Здесь я хочу выбрать время для конкретного значения в столбце ввода.Затем я конвертирую это время в "00: 00: 00 '
. Вот что ваш код уже делает. Я убрал его здесь и сделал его исполняемым:
# Here I've added the preliminary bits so it's executable.
import pandas as pd
data = pd.read_csv("data.csv", delimiter='\t')
# Here I've fixed the line wrapping, added .str.strip() because your data has trailing
# spaces, and removed dayfirst because it doesn't make sense if you're specifying format
data['date']= pd.to_datetime(data['date'] + " " + data['time'].str.strip(), format='%d/%m/%Y %H:%M:%S')
mask = data['X3'].eq(7)
data['t1'] = data['date'].mask(mask, data['date'].dt.floor('d'))
# And you're done. You can print the results, for example:
data[data['X3'] == 7]['t1']
Это дает
0 2018-03-10
2 2018-03-10
3 2018-03-10
4 2018-03-10
6 2018-03-10
7 2018-03-10
8 2018-03-10
10 2018-03-10
11 2018-03-10
12 2018-03-10
13 2018-03-10
15 2018-03-10
16 2018-03-10
17 2018-03-10
19 2018-03-10
20 2018-04-10
21 2018-04-10
Name: t1, dtype: datetime64[ns]
, который показывает, что все строки, которые соответствуют вашему условию, теперь изменили свое время на 00:00:00
. Обратите внимание, что pandas решает подавить показ времени, когда они все одинаковые. Вы можетенапечатайте все данные с помощью data
, чтобы заставить печатать время.
Затем вы говорите, что хотите
, для этого времени добавьте дельту времени (часы = 5).
Это неоднозначно, и, поскольку вы не показываете никаких попыток или не включаете его в ожидаемый результат, я не могу быть уверен. Но если предположить, что вы просто хотите 5 часов до вашего столбца datetime,это будет делать:
data['t1'] = data['t1'] + pd.DateOffset(hours=5)
Или, если вы хотите сделать это только для выбранных вами строк:
data.loc[data['X3'] == 7, 't1'] = data['t1'] + pd.DateOffset(hours=5)
И тогда вы скажете
Я пыталсякод, но он просто показывает мне только время. дата отсутствует.
Это то, что ваш код (в частности, f(x)
) делает.Поэтому, если вы не хотите, чтобы это делалось, не используйте этот код.
Надеюсь, это поможет.Что может помочь в будущем, так это начать с минимального воспроизводимого примера (MRE) .В вашем вопросе было много вещей, которые не помогли, и, вероятно, когда вы начнете сокращать MRE, вы все равно найдете то, что хотели.