我正在尝试对数据框进行子集化,但希望新数据框具有与原始数据框相同的大小。
附加输入,输出和预期输出。
df_input = pd.DataFrame([[1,2,3,4,5], [2,1,4,7,6], [5,6,3,7,0]], columns=["A", "B","C","D","E"])
df_output=pd.DataFrame(df_input.iloc[1:2,:])
df_expected_output=pd.DataFrame([[0,0,0,0,0], [2,1,4,7,6], [0,0,0,0,0]], columns=["A", "B","C","D","E"])
请提出前进的方向。
答案 0 :(得分:5)
使用std::vector
将子集还原为原始索引后,设置索引。这会将新行的所有值设置为reindex
,您可以通过NaN
将其替换为0。由于fillna
是NaN
t类型,因此您可以使用floa
将所有内容转换回int
。
astype
答案 1 :(得分:3)
设置
df = pd.DataFrame([[1,2,3,4,5], [2,1,4,7,6], [5,6,3,7,0]], columns=["A", "B","C","D","E"])
output = df_input.iloc[1:2,:]
您可以创建mask
并使用乘法:
m = df.index.isin(output.index)
m[:, None] * df
A B C D E
0 0 0 0 0 0
1 2 1 4 7 6
2 0 0 0 0 0
答案 2 :(得分:2)
我将使用where
+ between
df_input.where(df_input.index.to_series().between(1,1),other=0)
Out[611]:
A B C D E
0 0 0 0 0 0
1 2 1 4 7 6
2 0 0 0 0 0
答案 3 :(得分:0)
另一种选择是使用零值创建DataFrame,然后使用df_input slice更新它
df_output = pd.DataFrame(0, index=df_input.index, columns = df_input.columns)
df_output.update(df_input.iloc[1:2,:])