以下函数是包的一部分。socceractionimport pandas as pdfrom typing import List,Callabledef gamestates(actions : pd.DataFrame, nb_prev_actions: int =3) -> List[pd.DataFrame]: states = [actions] for i in range(1, nb_prev_actions): prev_actions = actions.copy().shift(i, fill_value=0) prev_actions.loc[: i - 1, :] = pd.concat([actions[:1]] * i, ignore_index=True) states.append(prev_actions) return states我试图将其应用于后续的数据框组,如下所示。dfdf = {'half_id': {1: '1', 36: '1', 259: '1', 314: '1', 324: '1', 335: '1', 798: '1', 834: '1', 906: '1', 1114: '1', 1170: '1', 1354: '1', 1494: '1', 1588: '2', 1688: '2', 2190: '2', 2227: '2', 2435: '2', 2734: '2', 2838: '2'}, 'variable': {1: 1.0, 36: 1.0, 259: 1.0, 314: 1.0, 324: 1.0, 335: 1.0, 798: 1.0, 834: 1.0, 906: 0.0, 1114: 1.0, 1170: 0.0, 1354: 0.0, 1494: 1.0, 1588: 1.0, 1688: 1.0, 2190: 0.0, 2227: 1.0, 2435: 1.0, 2734: 1.0, 2838: 1.0}}df = pd.DataFrame.from_dict(df)for _, half in df.groupby('half_id'): game_states = gamestates(half, 3)当我调用不在拆分但原始 DataFrame 上的函数时,问题不会持续存在:gamestates(df, 3)错误似乎在方法上被提出,同时将函数的输出分配给变量。但是我挠挠头为什么,找不到原因,可能在这里错过了一些明显的东西。说实话,关于广播阵列的信息对我来说是不清楚的。所以我的问题是:这个错误的原因是什么?使用数据框进行拆分与原始拆分数据有何不同?setitemgamestatesgame_statesValue Errorgroupby
1 回答

慕丝7291255
TA贡献1859条经验 获得超6个赞
拆分和原始 DataFrame 本身没有什么不同(显然,除了第一个是第二个数据的子集):
frames = [f for _,f in df.groupby('half_id')]
type(frames[0]) == type(df) # True (both are of the type pandas.core.frame.DataFrame)
使用第二个拆分数据帧进行调用时发生此错误,即,因为您正在尝试将形状 (2,2) 的数据帧分配给以下行中形状 (0,2) 的数据帧切片(当):gamestatesgamestates(frames[1], 3)i == 2
prev_actions.loc[: 1, :] = pd.concat([actions[:1]] * 2, ignore_index=True)
我不太确定代码的目的是什么,但请注意,使用标签提供访问权限,并且由于中的最低标签是1588,因此将导致空切片。.locframes[1]prev_actions.loc[: 1, :]
使用原始 DataFrame 时不会发生错误的原因是,这包括标签 1,它阻止了空切片。对我来说,对于给定的函数,数据结构似乎不正确。df
添加回答
举报
0/150
提交
取消