У меня есть следующий dataframe:Вычислить время различия дня в панде Dataframe
data = [
("10/10/2016","A"),
("10/10/2016","B"),
("09/12/2016","B"),
("09/12/2016","A"),
("08/11/2016","A"),
("08/11/2016","C")]
#Create DataFrame base
df = pd.DataFrame(data, columns=("Time","User"))
# Convert time column to correct format for time calculations
df["Time"] = pd.to_datetime(df["Time"], '%m/%d/%Y')
Каждая строка представляет, когда пользователь делает определенное действие. Я хочу рассчитать, как часто (с точки зрения дней) каждый пользователь делает это конкретное действие.
Предположим, что пользователь впервые совершил транзакцию в первый раз 08/11/2016, после чего он снова совершил повторное депонирование 09/12/2016, то есть примерно через 30 дней после этого. Затем он снова сдал 10/10/2016, примерно через 29 дней после его второй транзакции. Таким образом, его средняя частота в днях была бы (29 + 30)/2.
Каков наиболее эффективный способ сделать это?
Заранее благодарен!
- Update
я написал следующую функцию, которая вычисляет мой желаемый результат.
from datetime import timedelta
def averagetime(a):
numdeltas = len(a) - 1
sumdeltas = 0
i = 1
while i < len(a):
delta = abs((a[i] - a[i-1]).days)
sumdeltas += delta
i += 1
if numdeltas > 1:
avg = sumdeltas/numdeltas
else:
avg = 'NaN'
return avg
Он работает правильно, например, когда я прохожу весь столбец «Время»:
averagetime(df["Time"])
Но это дает мне ошибку, когда я пытаюсь применить его после того, как группы по.
df.groupby('User')['Time'].apply(averagetime)
Любые предложения, как я могу исправить вышеизложенное?
Не точный ответ, но, возможно, вы будет пытаться выполнить поиск в googling [попарно] (https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwiohv3d5KvNAhVU0WMKHYHWCR0QFggeMAA&url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F21467429% 2Fpairwise-matrix-from-a-pandas-dataframe & usg = AFQjCNG1vrKJgkLxfWwiCwHyDRTzG1aevA & sig2 = 1qi6JGBnoqNr7UFuT_3xPw) – hd1
Можете ли вы dd желаемый выход? – jezrael