【问题标题】:How to create new columns in python for loop using variable column names?如何使用变量列名在python for循环中创建新列?
【发布时间】:2021-10-09 15:02:55
【问题描述】:

在某些背景下,我一直在尝试为数据集中的每个唯一名称取每个财政周的数据集的平均值。我从看起来像这样的数据集开始:

pad fiscal_week value
Verace 5 23
Jersey 5 20
Verace 5 20
Verace 5 22
Verace 6 30
Colorado 4 15

我目前拥有的:

    unique_week = df['fiscal_week'].unique()
    unique_week = sorted(unique_week)
    newCols = pd.DataFrame()

    for week_number in unique_week:
        unique_id = df['pad'].unique()
        turbine_reg = df[df['fiscal_week'] == week_number]
        newColname = 'FW' + str(week_number)

        for turbine_name in unique_id:
            turbine_name_reg = turbine_reg[turbine_reg['pad'] == turbine_name]
            value_mean = [turbine_name_reg['value'].mean()]

            newCols['Turbine'] = turbine_name
            newCols[newColname] = direct_mean

我希望最终产品看起来像这样:

pad FW1 FW2 FW3
Verace 22 23 24
Jersey 15 16 20
Colorado 23 25 16

目前,我只得到循环运行的最后一个唯一垫的结果,而不是保存它为其他垫运行的时间。我知道循环每次都会覆盖自己,但我不确定如何修复它。

有什么想法吗?

【问题讨论】:

    标签: python dataframe


    【解决方案1】:

    我认为您可以使用 groupby() 函数来获取财政周内每个垫的平均值。

    data.groupby(by = ["pad", "fiscal_week"])["value"].aggregate('mean')
    

    此代码旋转网将返回如下表:

    pad fiscal_week meanValue
    Colorade 4 15
    Jersey 5 20
    Verace 5 21
    Verace 6 30

    然后您需要添加 unstack() 函数以获取财政周数作为列。您可以查看此答案以获取有关unstack的更多详细信息

    data.groupby(by = ["pad", "fiscal_week"])["value"].aggregate('mean').unstack()
    

    最后你会得到一个这样的表格:

    fiscal_week 4 5 6
    Colorade x x x
    Jersey x x x
    Verace x x x

    我认为这是您想要的格式。在这些过程之后,您可以使用函数来编辑您的表格。 (例如 rename、reset_index、drop)

    【讨论】:

    • 这正是我正在寻找的,而且比我试图做的更简单!非常感谢!
    【解决方案2】:

    我认为数据透视表是您正在寻找的:

            pad  fiscal_week  value
    0    Verace            5     23
    1    Jersey            5     20
    2    Verace            5     20
    3    Verace            5     22
    4    Verace            6     30
    5  Colorado            4     15
    
    table = pd.pivot_table(df, values='value', index=['pad'], columns=['fiscal_week'], aggfunc=np.mean)
    
    fiscal_week     4          5     6
    pad
    Colorado     15.0        NaN   NaN
    Jersey        NaN  20.000000   NaN
    Verace        NaN  21.666667  30.0
    

    【讨论】:

      【解决方案3】:

      听起来您实际上想使用df.groupby分组数据框by padfiscal_week 列。

      例如,从这个数据帧开始df:

               pad  fiscal_week  value
      0    Verace             5     23
      1    Jersey             5     20
      2    Verace             5     20
      3    Verace             5     22
      4    Verace             6     30
      5  Colorado             4     15
      

      我们可以使用以下方法计算按垫、按财政周的平均值:

      df.groupby(['pad', 'fiscal_week']).mean()
      

      输出:

                                 value
      pad       fiscal_week           
      Colorado  4            15.000000
      Jersey    5            20.000000
      Verace    5            21.666667
                6            30.000000
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-18
        • 1970-01-01
        • 2022-01-09
        • 1970-01-01
        • 2012-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多