我在 Python Pandas 中有一个数据框,我已将其转换为获取特定列的 3 周 View :
df["current_week"] = df.state
df["week_2"] = df.state.shift(-1)
df["week_3"] = df.state.shift(-2)
最终结果是:
这满足了我的要求 - 但是,某些 ID 不会有完整的 52 周。我想为每个缺少几周的 ID 生成新行,并为状态估算 0,仅添加缺少的几周 - 因此保留现有的行。举个例子,假设 ID A 有第 52、51 和 50 周,但缺少 49 和 48 - 我想实现这一点:
这看起来非常简单,我确信是我缺乏简洁解释问题的能力,导致我无法在 Google 上找到答案。非常感谢任何帮助。
最佳答案
我认为这应该可以解决您的问题...
此代码将您的第一个表作为输入,使用 .groupby()
根据 id
进行分组,并生成一个数据帧,其中包含每个组的所有可能的周数。然后用 0 填充缺失值(基本上是按照评论中的要求将 state
设置为 0)
之后,连接所有新数据帧并创建移动 state
列的新列。
groups_dfs = []
for name, group in df.groupby('id'):
df_tmp = pd.DataFrame({'week_number': list(range(1, 53))})
df_tmp['id'] = name
df_tmp = pd.merge(df_tmp, group, on=['id', 'week_number'], how='left')
df_tmp = df_tmp.fillna(0)
groups_dfs.append(df_tmp)
df_fixed = pd.concat(groups_dfs)
df_fixed = df_fixed.sort_values(['id', 'week_number'])
df_fixed["current_week"] = df_fixed.state
df_fixed["week_2"] = df_fixed.state.shift(-1)
df_fixed["week_3"] = df_fixed.state.shift(-2)
关于python - 生成额外的行值,以便每个 ID 具有相同数量的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75559386/