Return multiple columns from pandas apply()

后端 未结 9 2111
灰色年华
灰色年华 2020-11-30 18:43

I have a pandas DataFrame, df_test. It contains a column \'size\' which represents size in bytes. I\'ve calculated KB, MB, and GB using the following code:

9条回答
  •  [愿得一人]
    2020-11-30 19:30

    Just another readable way. This code will add three new columns and its values, returning series without use parameters in the apply function.

    def sizes(s):
    
        val_kb = locale.format("%.1f", s['size'] / 1024.0, grouping=True) + ' KB'
        val_mb = locale.format("%.1f", s['size'] / 1024.0 ** 2, grouping=True) + ' MB'
        val_gb = locale.format("%.1f", s['size'] / 1024.0 ** 3, grouping=True) + ' GB'
        return pd.Series([val_kb,val_mb,val_gb],index=['size_kb','size_mb','size_gb'])
    
    df[['size_kb','size_mb','size_gb']] = df.apply(lambda x: sizes(x) , axis=1)
    

    A general example from: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html

    df.apply(lambda x: pd.Series([1, 2], index=['foo', 'bar']), axis=1)
    
    #foo  bar
    #0    1    2
    #1    1    2
    #2    1    2
    

提交回复
热议问题