Объекты "Серии" изменяемы, поэтому их нельзя хэшировать. - PullRequest
1 голос
/ 16 июня 2020

У меня есть groupedBy Series, и я пытаюсь выполнить смену для каждой группы. Но требуемый сдвиг для каждой группы не всегда одинаков, поэтому я создал поисковый запрос, из которого я хочу извлечь сдвиг каждого соответствующего элемента.

Мой код:

shifted = shifted.groupby(by=["itemID", "date"]).shift(lookUp[shifted["itemID"]][expectedLagName])

Это не работает, поскольку shift ["itemID"] возвращает фрейм данных, он изменяемый, но поскольку его groupedBy должно быть только одно значение, и я не знаю, как его получить. Есть идеи?

Код воспроизведения:

data=range(1,101)
df=pd.DataFrame(data=data)
df.columns=["a"]
df["b"]= round(df["a"]/5)
lookUp={}
for i in range(1,21):
    lookUp[i] = round(i/2)

df = df.groupby(by=["b"]).shift(lookUp[df["b"]])
print(df)

1 Ответ

0 голосов
/ 16 июня 2020

Существует другой метод доступа к имени ключа: например,

result=df.groupby(by=["b"]).apply(lambda x:x.shift(lookUp[x.name]))
result=result.drop(["b"],axis=1)
result.reset_index(drop=True,inplace=True)

Это создает сдвиги на уровнях группы при выполнении поиска для получения желаемого значения задержки. Единственная проблема для меня заключается в том, что функция также применяется к клавише группы, отсюда и вызов сброса.

...