我需要根據多個索引('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
uj5u.com熱心網友回復:
您絕對可以遍歷具有超過 1 個索引的資料框。
首先,您的代碼存在一些主要問題:
- 為您的問題添加一些玩具資料,以便我們可以使用它來找到您面臨的問題的解決方案(而不是您的資料輸出)
- 永遠不要使用
del洗掉資料框中的某些列,使用 drop 或使用 or 選擇除一個以外的所有loc列iloc。 - 不要寫
all= [df_Ctrl, df_FR],all在python中有特定的含義,你應該選擇一個其他的名字。 for g in all: #if I put for key, g in all,all這里是兩個元素的串列,這里沒有什么可以解包的- 您的資料框不是多索引的,如果需要,您必須修改它。
- 我強烈建議您不要使用
[[]]選擇資料框的子資料框,而是使用loc或iloc。
如果我正確理解您的問題,您希望根據三個資料對資料框的元素進行分組:“治療”、“個人”、“制度”,然后對于每個分組值,您希望對 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']))
顯然,由于您沒有提供模型或曲線擬合,我無法測驗它是否正確。但主要思想在這里,你可以從中作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/445139.html
標籤:熊猫 熊猫-groupby 曲线拟合 文学编程
上一篇:獲取具有識別符號列的N行的平均值
