设置熊猫数据框的子集并保留原始大小

时间:2018-11-30 18:29:21

标签: python pandas dataframe

我正在尝试对数据框进行子集化,但希望新数据框具有与原始数据框相同的大小。
附加输入,输出和预期输出。

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"])  

请提出前进的方向。

4 个答案:

答案 0 :(得分:5)

使用std::vector将子集还原为原始索引后,设置索引。这会将新行的所有值设置为reindex,您可以通过NaN将其替换为0。由于fillnaNaN 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,:])