【问题标题】:Data-frame to show selected results only from columns divisions数据框仅显示来自列分区的选定结果
【发布时间】:2020-02-17 17:51:10
【问题描述】:

将月份列除以总计列的数据框。最后,我只想显示大于 35% (0.35) 的结果。

import pandas as pd

data = {'Name' : ["John","Peter","Kate","Liz"],
'Jan-2016': [408,88,277,32],
'Feb-2016': [313,348,73,302],
'Mar-2016': [497,197,196,164],
'Apr-2016': [88,87,447,118],
'May-2016': [79,20,235,273],
'Total': [1385,740,1228,889]}

df = pd.DataFrame(data)

df_1 = df[["Jan-2016","Feb-2016","Mar-2016","Apr-2016","May-2016"]].div(df["Total"], axis=0)

我只能算算。

输出结果大于等于0.3的方法是什么? (请注意 1 人可能适合 0-3 列)

谢谢。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:
    import pandas as pd
    
    data = {'Name' : ["John","Peter","Kate","Liz"],
    'Jan-2016': [408,88,277,32],
    'Feb-2016': [313,348,73,302],
    'Mar-2016': [497,197,196,164],
    'Apr-2016': [88,87,447,118],
    'May-2016': [79,20,235,273],
    'Total': [1385,740,1228,889]}
    
    df = pd.DataFrame(data)
    
    cols = ["Jan-2016","Feb-2016","Mar-2016","Apr-2016","May-2016"]
    
    df[cols] = df[cols].div(df["Total"], axis=0)
    
    # reshape to use months as a single column
    reshaped = pd.melt(df, id_vars="Name", value_vars=cols)
    
    result = reshaped[reshaped['value'] >= 0.3]
    
    print(result)
    

    输出:

         Name  variable     value
    5   Peter  Feb-2016  0.470270
    7     Liz  Feb-2016  0.339708
    8    John  Mar-2016  0.358845
    14   Kate  Apr-2016  0.364007
    19    Liz  May-2016  0.307087
    

    【讨论】:

      【解决方案2】:

      你可以使用:

      df.set_index('Name', inplace=True)
      df.iloc[:, :-1].div(df['Total'], axis=0)\
      .stack().loc[lambda x: x >= 0.3]
      

      输出:

      Name           
      John   Mar-2016    0.358845
      Peter  Feb-2016    0.470270
      Kate   Apr-2016    0.364007
      Liz    Feb-2016    0.339708
             May-2016    0.307087
      dtype: float64
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多