Как я могу сложить конкретное значение месяца с датой в кадре панды? - PullRequest
1 голос
/ 25 апреля 2019

У меня есть такой набор данных

ID, ДАТА, НЕТ, МЕСЯЦ

1,24 / 04 / 2019,6,2019 / 09

1,24 / 04 / 2019,7,2019 / 09

И у меня есть месяцы для объявления в столбце ДАТА.Например, я хочу, чтобы 24/04/2019 добавить с 6 месяцев -> 2019/10 в моем новом столбце

Ошибка:

TypeError: может только объединить str (не"int") to str

import pandas as pd

dataset = pd.read_csv("denemedf.txt", delimiter=",")
print(dataset['DATE'])
dataset['ADDED'] = 0 #new column
data_to_Array = np.asarray(dataset['DATE'])
#print(data_to_Array)

numbers = [3,6]

for i in range(len(data_to_Array)):
    added_value = data_to_Array[i] + numbers[i]
    dataset['ADDED'][i] = added_value

from datetime import datetime
print ( dataset['ADDED'].strftime("%Y/%m") )

Как я могу увидеть этот результат в наборе данных ['ДОБАВЛЕНО'], как этот год / месяц?

Надеюсь, я объяснил ясночто я хочу сделать.

Ожидаемый результат такой:

ID, ДАТА, НЕТ, МЕСЯЦ, ДОБАВЛЕНО

1,24 / 04/2019,6,2019 / 09,2019 / 7

1,24 / 04 / 2019,7,2019 / 09,2019 / 10

Ответы [ 3 ]

1 голос
/ 25 апреля 2019

Вы должны сначала преобразовать строку столбца DATE в дату и время с помощью этой функции .Затем вы можете использовать лямбда-функцию для создания нового столбца с pandas DateOffset .

dataset = pd.DataFrame({'DATE': ['24/04/2019', '24/04/2019'], 'NO': [6,7]})
dataset['DATE'] = dataset.apply(lambda x: datetime.datetime.strptime(x['DATE'], '%d/%m/%Y'), axis=1)
dataset['ADDED'] = dataset.apply(lambda x: x['DATE'] + pd.DateOffset(months=x['NO']), axis=1)
1 голос
/ 25 апреля 2019

Использовать месячные периоды на Series.dt.to_period, поэтому можно добавить количество дней из списка или столбца, в последний раз преобразовать выходные данные в строки на strftime:

numbers = [3,6]
s = pd.to_datetime(df['DATE']).dt.to_period('m')
df['ADDED'] = (s + np.array(numbers)).dt.strftime("%Y/%m")
print (df)

   ID        DATE  NO    MONTH    ADDED
0   1  24/04/2019   6  2019/09  2019/07
1   1  24/04/2019   7  2019/09  2019/10

Если необходимо добавить NO столбец:

s = pd.to_datetime(df['DATE']).dt.to_period('m')
df['ADDED'] = (s + df['NO']).dt.strftime("%Y/%m")
print (df)
   ID        DATE  NO    MONTH    ADDED
0   1  24/04/2019   6  2019/09  2019/10
1   1  24/04/2019   7  2019/09  2019/11
0 голосов
/ 25 апреля 2019

Похоже, вам нужно

import pandas as pd

numbers = [3,6]
df = pd.read_csv(filename, parse_dates=["DATE"])
df["ADDED"] = [(d +  pd.DateOffset(months=mon)) for d, mon in zip(df["DATE"], numbers)]  
df["ADDED"] = df["ADDED"].dt.strftime("%Y/%m")
print(df)  

Вывод:

   ID       DATE  NO     MONTH    ADDED
0   1 2019-04-24   6  2019/09   2019/07
1   1 2019-04-24   7   2019/09  2019/10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...