names = ['john', 'pete', 'jack']
funds = [1000, 3600, 2390]
df = pd.DataFrame({'Name': names, 'Fund': funds})
df['m1'] = np.nan
df['m2'] = np.nan
df['m3'] = np.nan
df['m4'] = np.nan
df['m5'] = np.nan
df['m6'] = np.nan
df['m7'] = np.nan
df['m8'] = np.nan
df['m9'] = np.nan
df['m10'] = np.nan
df['m11'] = np.nan
df['m12'] = np.nan
原始檔案
Name Fund m1 m2 m3 m4 m5 m6 m7 m8 m9 m10 m11 m12
0 john 1000 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 pete 3600 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 jack 2390 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
重新創建的df結構代表了我收到的典型 csv 檔案的結構。我需要根據一組“資金條件發布”進行填充,這些條件從 csv 表到下一個都不同。
下面我提供了一組“基金條件發布”的示例,我想為此創建一個腳本,當條件更改時,我可以輕松地進行調整。
基金條件發布
john從 m1 開始,每月 10% 的資金,持續 10 個月
皮特基金的12.5%,月供后的M2開始8個月
從 m4 開始的 5 個月內每月提取20% 的資金
我希望能夠將發布資金條件作為代碼應用以產生如下所示的輸出:
期望輸出
Name Fund m1 m2 m3 m4 m5 m6 m7 m8 m9 m10 m11 m12
0 john 1000 NaN 100 100 100 100 100 100 100 100 100 100 NaN
1 pete 3600 NaN NaN 450 450 450 450 450 450 450 450 NaN NaN
2 jack 2390 NaN NaN NaN NaN 478 478 478 478 478 NaN NaN NaN
我認為可能需要一個元組或字典,但老實說我不知道??如何處理這個任務。
提前謝謝了
uj5u.com熱心網友回復:
你可以試試這個片段作為起點 -
# target columns range for each Name
cols = list(df.columns)
john = cols[cols.index('m2'):cols.index('m2') 10]
pete = cols[cols.index('m3'):cols.index('m3') 8]
jack = cols[cols.index('m5'):cols.index('m5') 5]
# Calculate funds for each Name and distribute in the targeted columns
df.loc[df.Name=='john', john] = [df[df.Name=='john'].iloc[0].Fund*0.1] * len(john)
df.loc[df.Name=='pete', pete] = [df[df.Name=='pete'].iloc[0].Fund*0.125] * len(pete)
df.loc[df.Name=='jack', jack] = [df[df.Name=='jack'].iloc[0].Fund*0.20] * len(jack)
這是pandas行索引器和列索引器分配值串列的基本邏輯。代碼段的第一部分根據您的邏輯定位列名。例如,john 的目標列名稱從m2下一個 10 個月開始并持續到下一個 10 個月。
cols[cols.index('m2'):cols.index('m2') 10]回傳這些列串列,其中10是下個月的數量。此列串列已用于將dffor 中的列作為目標john以更新值。
同樣的邏輯也適用于其他Names。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/334240.html
