【问题标题】:how to update multiple columns of pandas dataframe inplace and in single instance如何就地和在单个实例中更新多列熊猫数据框
【发布时间】:2016-12-15 06:47:18
【问题描述】:

考虑下面pandasDataFrame

df = pd.DataFrame(np.random.randint(1,10,15).reshape(-1,3), columns = list('abc'))

我想在单个实例中将所有三列的值更新为适当的比率(即列值除以所有三列的总和,轴 = 1)。

类似:

df = df.loc[:,['a','b','c']] / df.loc[:,['a','b','c']].sum(axis = 1)

我怎样才能做到这一点?

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    你可以使用pandas.DataFrame.div方法:

    df.div(df.sum())
    
    #          a           b           c
    #0  0.071429    0.368421    0.173913
    #1  0.214286    0.210526    0.391304
    #2  0.214286    0.052632    0.043478
    #3  0.285714    0.105263    0.130435
    #4  0.214286    0.263158    0.260870
    

    要按行划分,请相应地指定轴:

    df1 = df.div(df.sum(axis = 1), axis = 0)
    

    这是一个结果数据框的行和为 1 的测试。

    df1.sum(axis = 1)
    
    #0    1.0
    #1    1.0
    #2    1.0
    #3    1.0
    #4    1.0
    #dtype: float64
    

    【讨论】:

    • 我无法在轴设置为 1(水平)的情况下执行此操作。尽管如果将轴设置为 0(垂直),则此方法有效。在这种情况下,我必须转置 df。类似于:df.T.div(df.T.sum()).T
    • 检查更新,需要在两个函数中相应指定轴。
    猜你喜欢
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2023-02-23
    • 2022-11-02
    • 2020-11-15
    • 2023-04-07
    • 2021-01-15
    • 2023-01-17
    相关资源
    最近更新 更多