【问题标题】:'Series' objects are mutable, thus they cannot be hashed“系列”对象是可变的,因此它们不能被散列
【发布时间】:2020-06-16 09:34:22
【问题描述】:

我有一个 groupedBy 系列,并且正在尝试对每个组执行轮班。但每组所需的班次并不总是相同,因此我创建了一个查找字典,我想从中提取每个项目的班次。

我的代码:

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)

【问题讨论】:

  • 那应该是行号吧?我认为我无法制作匹配的查找字典
  • 对不起,我以为它会返回一个唯一的整数。我的坏
  • itemID 是一个唯一整数,但我无法使用该方法访问该值。我得到的只是一个包含该单个整数的数据框

标签: python dataframe series


【解决方案1】:

有不同的方法来访问密钥名称: 例如

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)

这会在组级别上产生变化,同时执行查找以获得所需的滞后值。对我来说唯一的问题是,该功能也适用于组键,因此是挂断电话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2021-01-17
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    相关资源
    最近更新 更多