Я работаю с примером набора данных:
date name point
0 4/24/2019 Martha 3617138
1 4/25/2019 Martha 3961918
2 4/26/2019 Martha 4774966
3 4/27/2019 Martha 5217946
4 4/24/2019 Alex 62700321
5 4/25/2019 Alex 66721020
6 4/26/2019 Alex 71745138
7 4/27/2019 Alex 88762943
8 4/28/2019 Alex 102772578
9 4/29/2019 Alex 129089274
10 3/1/2019 Josh 1063259
11 3/3/2019 Josh 1063259
12 3/4/2019 Josh 1063259
13 3/5/2019 Josh 1063259
14 3/6/2019 Josh 1063259
и списком значений имен
nameslist = ['Martha', 'Alex', 'Josh']
Я хочу рассчитать процентное изменение всех строк на основеидентификатор в столбце имени.
ожидаемый вывод:
name percent change
Martha 30.7
Alex 51.4
Josh 0
Сначала я попытался перебрать свой список и таблицу, добавить все строки, соответствующие значению списка, добавить список с помощьюрассчитать изменение, затем переместить следующее значение в моем списке, но я не могу правильно сформулировать свой код, чтобы это произошло.
df['date'] = pd.to_datetime(df['date'])
df = df.sort_values(by='date')
growthlist=[]
temptable=[]
for i in nameslist:
for j in df:
temptable.append(df[df['name'].str.match(nameslist[i])])
length=[]
growth=temptable[0]-temptable[length-1]
growthlist.append(i,growth)
, но это приводит к ошибке:
TypeError: list indices must be integers or slices, not str
Я также не возражаю против использования .groupby () и .pct_change () для достижения этой цели, но
growth = df.groupby('name').pct_change()
генерирует длинную обратную трассировку, которая заканчивается:
TypeError: unsupported operand type(s) for /: 'str' and 'float'
в конечном итогеЯ хотел бы вложить это в функцию, чтобы я мог использовать ее в других наборах данных и иметь возможность выбрать имя моего столбца (фактические наборы данных, с которыми я работаю, не стандартизированы, поэтому имена целевых столбцов часто различаются)
def calc_growth(dataset,colname):
но я не уверенесли это слишком много, спросите об этом одном вопросе.
К сожалению, я совершенно заблудился с этим вопросом, поэтому любая помощь будет оценена.Мне также интересно, является ли преобразование более легким способом для этого, потому что, по крайней мере, я всегда буду знать точное местоположение двух цифр, которые мне нужно рассчитать, но я даже не знаю, как бы я начал что-то подобное.
Спасибо