我正在嘗試將其合并為一個 for 回圈。嘗試為每個年齡設定一個單獨的資料框,對每個資料框進行排序,計算其中一列的平均值,然后將資料框保存到 Excel 檔案中
df21=df[~df['Age'].isin(['22','23','24','25'])]
df21=df21.sort_values(by='FPS/G',ascending=False)
mean21=df21["FPS/G"].mean()
df21.to_excel(writer, 'Age 21')
df22=df[~df['Age'].isin(['21','23','24','25'])]
df22=df22.sort_values(by='FPS/G',ascending=False)
mean22=df22["FPS/G"].mean()
df22.to_excel(writer, 'Age 22')
df23=df[~df['Age'].isin(['21','22','24','25'])]
df23=df23.sort_values(by='FPS/G',ascending=False)
mean23=df23["FPS/G"].mean()
df23.to_excel(writer, 'Age 23')
df24=df[~df['Age'].isin(['21','22','23','25'])]
df24=df24.sort_values(by='FPS/G',ascending=False)
mean24=df24["FPS/G"].mean()
df24.to_excel(writer, 'Age 24')
df25=df[~df['Age'].isin(['21','22','23','24'])]
df25=df25.sort_values(by='FPS/G',ascending=False)
mean25=df25["FPS/G"].mean()
df25.to_excel(writer, 'Age 25')
uj5u.com熱心網友回復:
如何將重復代碼轉換為回圈:
我們在迭代(回圈)什么?
每次通過我們的程序,我們都會處理不同的可能年齡值。這些顯然是字串,選自'21'、'22'、'23'和。'24''25'
在整個程序中,每次都有什么不同?
臨時資料框的變數名;但這沒關系——它們是暫時的;我們不關心
df21等的值。我們只關心寫入檔案。所以我們可以為此重用一個變數。均值的變數名稱。我們不想每次都嘗試通過回圈創建不同的變數——相反,我們將以某種資料結構收集資料。在這里,a
dict是自然選擇。用于
to_excel方法呼叫的標簽。使用過濾掉的年齡
.isin。
每次都有什么相同的?
寫出它的外殼,使用注釋和臨時變數來標記步驟 1 中的部分。對于我們所說的無關緊要的部分,我們將使用更通用的變數名稱。我們dict現在也將撰寫邏輯。
這給了我們:
# First, we set up an empty dictionary for the means:
means = {}
# Each time through the loop, we will do something like:
age = # <-- we will need something that changes each time, representing
# the age we are currently processing.
other_ages = # ??? we need to base this off the `age` somehow.
age_df = df[~df['Age'].isin(other_ages)]
age_df = age_df.sort_values(by='FPS/G',ascending=False)
means[age] = age_df["FPS/G"].mean()
label = # ??? we need to base this off the `age` somehow.
age_df.to_excel(writer, label)
缺失的邏輯是什么?
age只是我們的迭代變數,所以我們不需要分配它——我們將使用一個for回圈,它會自動來自那個回圈。我們將可能的值放入一個易于迭代的元組(或串列)中。讓我們稱之為ages。other_ages需要是一個看起來像完整年齡串列的串列,但已age洗掉。例如,我們可以通過對值進行串列復制來獲得ages它.remove;或者我們可以使用串列推導來制作過濾副本(我將在這里展示的方法)。label必須是以年齡字串開頭'Age '和結尾的文本。我們可以使用字串格式輕松創建它。
插入這些邏輯位,我們得到最終結果:
means = {}
ages = ('21', '22', '23', '24', '25')
for age in ages:
other_ages = [a for a in ages if a != age]
age_df = df[~df['Age'].isin(other_ages)]
age_df = age_df.sort_values(by='FPS/G',ascending=False)
means[age] = age_df["FPS/G"].mean()
label = f'Age {age}'
age_df.to_excel(writer, label)
當然,如果我們愿意,我們可以將新的臨時計算放在一起:
means = {}
ages = ('21', '22', '23', '24', '25')
for age in ages:
age_df = df[~df['Age'].isin([a for a in ages if a != age])]
age_df = age_df.sort_values(by='FPS/G',ascending=False)
means[age] = age_df["FPS/G"].mean()
age_df.to_excel(writer, f'Age {age}')
uj5u.com熱心網友回復:
回圈遍歷年齡字串串列。在過濾時使用它來為您寫入 Excel 檔案的特定年齡創建 df。并將手段放入按年齡鍵入的字典中,而不是單獨的變數。
ages = ['21', '22', '23', '24', '25']
means = {}
for age in ages:
age_df = df[df['Age'] == age].sort_values(by='FPS/G',ascending=False)
means[age] = age_df["FPS/G"].mean()
age_df.to_excel(writer, f'Age {age}')
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/470694.html
上一篇:如何使用矩陣乘法簡化for回圈?
下一篇:替換為單行的串列迭代
