如何在数据框中迭代并获取每个组的输出?现在我只得到一行,并且无法识别一组

How can I iterate in dataframe and get output for each group? Now I get only one line and one group is not recognized

我需要根据多个索引('Treatment'、'individual'、'regime')遍历数据框中的每个数据集。我想使用 x 和 y 为每个治疗、个人和制度应用曲线拟合。目前我只能使用一个索引。

这是数据框

df_tot

       Treatment        y        x      individual   regime
0       White       21.982733   800   Data20210608  Ctrl
1       White       21.973003   800   Data20210508  Ctrl
2       White       21.968242   800   Data20210408  Ctrl
3       White       21.982733   600   Data20210608  Ctrl
4       White       21.973003   600   Data20210508  Ctrl
5       White       21.968242   600   Data20210408  Ctrl
6       White       21.982733   500   Data20210608  Ctrl
7       White       21.973003   500   Data20210508  Ctrl
5       White       21.968242   500   Data20210408  Ctrl
15      White_FR    22.139293   800   Data20210608  Ctrl
16      White_FR    22.159840   800   Data20210508  Ctrl
17      White_FR    22.162254   800   Data20210408  Ctrl
18      White_FR    22.139293   600   Data20210608  Ctrl
19      White_FR    22.159840   600   Data20210508  Ctrl
20      White_FR    22.162254   600   Data20210408  Ctrl
21      White_FR    22.139293   500   Data20210608  Ctrl
22      White_FR    22.159840   500   Data20210508  Ctrl
23      White_FR    22.162254   500   Data20210408  Ctrl
2500    White       1.864671    800   Data20210708  T
2501    White       1.871709    800   Data20210608  T
2502    White       1.884706    800   Data20210508  T
2503    White       1.872854    600   Data20210708  T
2504    White       1.872233    600   Data20210608  T
2505    White       1.872344    600   Data20210508  T
2506    White       1.872854    500   Data20210708  T
2507    White       1.872233    500   Data20210608  T
2508    White       1.872344    500   Data20210508  T
2519    White_FR    1.882861    800 Data20210708    T
2520    White_FR    1.917002    800 Data20210608    T
2521    White_FR    1.903067    800 Data20210508    T
2519    White_FR    1.882861    600 Data20210708    T
2520    White_FR    1.917002    600 Data20210608    T
2521    White_FR    1.903067    600 Data20210508    T
2519    White_FR    1.882861    500 Data20210708    T
2520    White_FR    1.917002    500 Data20210608    T
2521    White_FR    1.903067    500 Data20210508    T

这是代码:

 variables={'Spectrum':Spectrum,  date':date, 'regime':regime, 
             'slope':float} 
 results = pd.DataFrame(variables, index=[])


 group_df = df_tot.groupby(["Spectrum", "date", "regime", "PPFD", 
              "start"])

 def model(x, slope):
    return  (slope*x) + start


 group_df.apply(lambda x : curve_fit(model, x.loc[:, 'PPFD'], 
                x.loc[:, 'Photo']))

 new_row = {'Spectrum': Spectrum, date':date, 'regime':regime, 'slope': 
             popt[0]}  ## adding Spectrum gives an error
                        #name 'Spectrum' is not defined
 results=results.append(new_row, ignore_index=True)

现在我明白了

 results
        date       regime  slope
 0    Data20210608 Ctrl 0.05

您绝对可以遍历具有 1 个以上索引的数据框。

首先,您的代码存在一些重大问题:

  1. 为你的问题添加一些玩具数据,这样我们就可以用它来找到你所面临问题的解决方案(而不是你的数据输出)
  2. 永远不要使用 del 删除数据框中的某些列,使用 drop 或 select 除了一个使用 lociloc.
  3. 不要写all= [df_Ctrl, df_FR]all在python中有特定的含义,你应该选择其他名称。
  4. for g in all: #if I put for key, g in all,all这里是两个元素的列表,这里没有什么要解压的
  5. 您的数据框不是多索引的,如果需要,您必须修改它。
  6. 我强烈建议您不要使用 [[]] 到 select 数据帧的子数据帧,而是使用 loc or iloc

如果我对您的问题的理解正确,您希望根据三个数据对数据框的元素进行分组:'Treatment'、'individual'、'regime',然后对于每个分组值,您想对 x 和 y 执行指定的操作。你可以适应这个:

group_df = df_tot.groupby(["Treatment", "individual", "regime"])
curved_df = group_df.apply(lambda x : curve_fit(model, x.loc[:, 'x'], x.loc[:, 'y']))

很明显,因为你没有提供模型,也没有curve_fit,我无法测试它是否正确。但主要思想就在这里,您可以从中着手。