簡體   English   中英

如何正確循環范圍和列表以創建 Pandas Dataframe?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM