[英]How to correctly loop through range and list to create Pandas Dataframe?
我有 function get_differences
其中 output 是字典,如下所示。 這種情況下的數字不相關,它只是此 function 生成的 output 的示例:
get_differences(column = 'column_A', percent = 10)
{'Feature': 'column_A',
'Pos_obs_10%': -0.98,
'Pos_obs_target': 1,
'Pos_obs_-10%': -1.23}
要獲得所有列的 Pandas Dataframe,我正在這樣做:
full_output = []
for col in df.columns:
output = get_differences(column = col, percent = 10)
full_output.append(output)
df_output = pd.DataFrame(full_output)
通過執行此代碼,我的結果如下所示:
Feature Pos_obs_-10% Pos_obs_target Pos_obs_10%
0 column_A -0.98 -1.96 -0.98
1 column_B -0.23 0.00 0.55
2 column_C 1.55 -2.94 4.90
3 column_D -0.23 0.98 -0.98
這也是正確的。 但我想從 Pandas Dataframe 中的 function 中獲得每個列和百分比范圍的結果。 例如 10、50 和 100%。
我想要的 output 是:
Feature Pos_obs_-100$ Pos_obs_-50 Pos_obs_-10% Pos_obs_target Pos_obs_10% Pos_obs_50% Pos_obs_100%
0 column_A -0.98 -1.96 -0.98 -0.98 -1.96 -0.98 -0.98
1 column_B -0.23 0.00 0.55 -0.98 -1.96 -0.98 -0.98
2 column_C 1.55 -2.94 4.90 -0.98 -1.96 -0.98 -0.98
3 column_D -0.23 0.98 -0.98 -0.98 -1.96 -0.98 -0.98
這里的數字也是隨機的,只是為了顯示示例 output。當我嘗試這樣的循環時:
percentage = range(1,5)
full_output_acrylamide = []
for n in percentage:
for col in df.columns:
output = get_differences(column = col, percent = n)
full_output.append(output)
df_output = pd.DataFrame(full_output)
我在 DataFrame 中有很多 NaN 並且列在重復,如下所示:
Feature Pos_obs_-100$ Pos_obs_-50 Pos_obs_-10% Pos_obs_target Pos_obs_10% Pos_obs_50% Pos_obs_100%
0 column_A 0.00 NaN -0.98 -0.98 -1.96 NaN -0.98
1 column_B -2.96 NaN 0.55 -0.98 -1.96 NaN -0.98
2 column_C 0.00 NaN 4.90 -0.98 -1.96 NaN -0.98
3 column_D -0.98 NaN -0.98 -0.98 -1.96 NaN -0.98
4 column_A -0.98 -0.12 NaN -0.98 NaN -0.98 -0.98
5 column_B -0.23 0.55 NaN -0.98 NaN -0.98 -0.98
6 column_C 1.55 4.90 NaN -0.98 NaN -0.98 -0.98
7 column_D -0.23 -0.98 NaN -0.98 NaN -0.98 -0.98
在內部循環中創建DataFrame
, append 到另一個列表並最后使用concat
:
percentage = range(1,5)
dfs = []
for n in percentage:
L = []
for col in df.columns:
output = get_differences(column = col, percent = n)
L.append(output)
dfs.append(pd.DataFrame(L))
df_output = pd.concat(dfs, axis=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.