2 回答

TA貢獻(xiàn)1906條經(jīng)驗 獲得超10個贊
reindex
設(shè)置'A'為索引并將reindex為我們指定的每個值創(chuàng)建一行,使用range. 所有其他列的缺失單元格是(分別為浮點數(shù)和對象)。無需在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'是重復(fù)的,那么我們需要一個outer連接來完成同樣的事情。
(df.set_index('A')
.join(pd.DataFrame(index=pd.Index(idx, name='A')), how='outer')
.reset_index())

TA貢獻(xiàn)1821條經(jīng)驗 獲得超6個贊
讓我們重新創(chuàng)建您的 DataFrame 并通過以下方式對其進(jìn)行索引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")
一種選擇是創(chuàng)建一個新的 DataFrame,其中填充所有可能的條目,A并在 中使用零B:
complete_df = pd.DataFrame({"A": range(1, N + 1), "B": [0] * N})
complete_df = complete_df.set_index("A")
現(xiàn)在您可以使用 in 的值進(jìn)行更新df并刪除 on 的索引A:
complete_df = df.combine_first(complete_df)
complete_df = complete_df.reset_index()
這樣,您將保留所有列,在B所有新行的列中置零,并NaN在所有其他列中置零。
分享
編輯
跟隨
于 2019 年 10 月
添加回答
舉報