如何使用变量列名在python for循环中创建新列?

2024-09-27 09:34:21 发布

您现在位置:Python中文网/ 问答频道 /正文

出于某种背景,我一直在尝试获取数据集中每个唯一名称的每个财政周的数据集平均值。我从如下数据集开始:

^{tb1}$

我目前拥有的:

    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

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

^{tb2}$

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

有什么想法吗


Tags: 数据nameinidnumberdfforreg
3条回答

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

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

此代码spinnet将返回如下表:

^{tb1}$

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

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

最后,您将得到如下表格:

^{tb2}$

我想这是你想要的格式。完成这些过程后,您可以使用函数编辑表格。(例如重命名、重置索引、删除)

听起来您实际上想使用df.groupby通过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

我们可以使用以下公式计算pad、财政周平均值:

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

我认为pivot表是您需要的:

        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

相关问题 更多 >

    热门问题