代码之家  ›  专栏  ›  技术社区  ›  Abhishek Kulkarni

子设置熊猫数据帧并保留原始大小

  •  5
  • Abhishek Kulkarni  · 技术社区  · 6 年前

    我试图对一个数据帧进行子集设置,但希望新的数据帧具有与原始数据帧相同的大小。
    附加输入、输出和预期输出。

    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 回复  |  直到 6 年前
        1
  •  5
  •   Kyle    6 年前

    在子集返回到原始索引后,使用 reindex . 这会将新行的所有值设置为 NaN ,可以用0替换 fillna . 自从 是一个 floa T类型,可以将所有内容转换回 int 具有 astype .

     df_input.iloc[1:2,:].reindex(df_input.index).fillna(0).astype(int)
    
        2
  •  3
  •   user3483203    6 年前

    安装程序

    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
    
        3
  •  2
  •   BENY    6 年前

    我会用 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
    
        4
  •  0
  •   Sergei    6 年前

    另一个选项是用零值创建数据帧,然后用df_输入切片更新它。

    df_output = pd.DataFrame(0, index=df_input.index, columns = df_input.columns)
    df_output.update(df_input.iloc[1:2,:])