2 回答
TA贡献1906条经验 获得超10个赞
reindex
设置'A'为索引并将reindex为我们指定的每个值创建一行,使用range. 所有其他列的缺失单元格是(分别为浮点数和对象)。无需在reindex.
df = pd.DataFrame({'A': [4, 3, 1, 7],
'B': [10, 11, 12, 13],
'C': ['B1', 'B2', 'B3', 'B4'],
'D': [True, False, True, True]})
idx = range(df.A.min(), df.A.max()+1) # All 'A' values you want to represent
df.set_index('A').reindex(idx).reset_index()
# A B C D
#0 1 12.0 B3 True
#1 2 NaN NaN NaN
#2 3 11.0 B2 False
#3 4 10.0 B1 True
#4 5 NaN NaN NaN
#5 6 NaN NaN NaN
#6 7 13.0 B4 True
如果'A'是重复的,那么我们需要一个outer连接来完成同样的事情。
(df.set_index('A')
.join(pd.DataFrame(index=pd.Index(idx, name='A')), how='outer')
.reset_index())
TA贡献1821条经验 获得超6个赞
让我们重新创建您的 DataFrame 并通过以下方式对其进行索引A:
rows = [1, 4, 3, 7]
df = pd.DataFrame({"A": rows, "B": [1] * len(rows), "C": ["string"] * len(rows)})
N = df.A.max()
df = df.set_index("A")
一种选择是创建一个新的 DataFrame,其中填充所有可能的条目,A并在 中使用零B:
complete_df = pd.DataFrame({"A": range(1, N + 1), "B": [0] * N})
complete_df = complete_df.set_index("A")
现在您可以使用 in 的值进行更新df并删除 on 的索引A:
complete_df = df.combine_first(complete_df)
complete_df = complete_df.reset_index()
这样,您将保留所有列,在B所有新行的列中置零,并NaN在所有其他列中置零。
分享
编辑
跟随
于 2019 年 10 月
添加回答
举报