# Sample of existing Dataframe
data = {'portfolio': ['40/60', '60/40', '80/20', '100/0']}
test_df = pd.DataFrame(data)
# print dataframe.
test_df
Output:
portfolio
40/60
60/40
80/20
100/20
我正在嘗試根據現有列中的值創建新列以包含投資組合的名稱和模型名稱。注意:還有其他幾行包含這些現有值/比率,這些值/比率構成了每個投資組合的完整分配。所以我需要投資組合名稱與“投資組合”列中的相應值保持一致。這是我在下面使用的當前代碼:
def test(df):
column1 = []
column2 = []
for row in df['Portfolio']:
if row == '40/60':
column1.append('Portfolio 1')
column2.append('Portfolio 1 Model')
elif row == '60/40':
column1.append('Portfolio 2')
column2.append('Portfolio 2 Model')
elif row == '80/20':
column1.append('Portfolio 3')
column2.append('Portfolio 3 Model')
elif row == '100/0':
column1.append('Portfolio 4')
column2.append('Portfolio 4 Model')
else:
column1.append('N/A')
column2.append('N/A')
df['portfolio_name'] = column1
df['model_name'] = column2
return df
test(test_df)
Expected output:
portfolio. portfolio_name. model_name
40/60 Portfolio 1 Portfolio 1 Model
60/40 Portfolio 2 Portfolio 2 Model
80/20 Portfolio 3 Portfolio 3 Model
100/0 Portfolio 4 Portfolio 4 Model
Actual Output:
portfolio. portfolio_name. model_name
40/60 N/A N/A
60/40 N/A N/A
80/20 N/A N/A
100/0 N/A N/A
我只是不確定我在這里缺少什么以及為什么附加到新創建的列的值只能識別“else”條件?
uj5u.com熱心網友回復:
我認為問題在于 for 回圈的可迭代性,您應該使用它:
for i, row in df['Portfolio'].items():
uj5u.com熱心網友回復:
嘗試使用字典映射您的值:
names = {'40/60': {'portfolio_name': 'Portfolio 1', 'model_name': 'Portfolio 1 Model'},
'60/40': {'portfolio_name': 'Portfolio 2', 'model_name': 'Portfolio 2 Model'},
'80/20': {'portfolio_name': 'Portfolio 3', 'model_name': 'Portfolio 3 Model'},
'100/0': {'portfolio_name': 'Portfolio 4', 'model_name': 'Portfolio 4 Model'},}
df = df.join(df['Portfolio'].map(names).dropna().apply(pd.Series))
print(df)
# Output
Portfolio portfolio_name model_name
0 40/60 Portfolio 1 Portfolio 1 Model
1 60/40 Portfolio 2 Portfolio 2 Model
2 80/20 Portfolio 3 Portfolio 3 Model
3 100/0 Portfolio 4 Portfolio 4 Model
4 50/50 NaN NaN
設定:
data = {'Portfolio': ['40/60', '60/40', '80/20', '100/0', '50/50']}
df = pd.DataFrame(data)
uj5u.com熱心網友回復:
data = {'portfolio': ['40/60', '60/40', '80/20', '100/0']}
df = pd.DataFrame(data)
df['portfolioName'] = "portfolio " df.index.map(str)
df['modelName'] = "portfolio " df.index.map(str) " Model"
df = df.set_index('portfolio')
結果如下
portfolio portfolioName modelName
40/60 portfolio 0 portfolio 0 Model
60/40 portfolio 1 portfolio 1 Model
80/20 portfolio 2 portfolio 2 Model
100/0 portfolio 3 portfolio 3 Model
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/399317.html
上一篇:DataFrame:如何使用索引和列作為x和y,將資料作為z繪制3D圖形?
下一篇:如何根據另一列中的較大值過濾行?
