簡體   English   中英

有沒有辦法從 dataframe 中的列創建 n 個數據幀? 飛騰

[英]Is there a way to create n number of dataframes from columns in a dataframe? Phyton

希望你沒事。

我正在使用一些看起來像這樣的數據框:

df:
          Col1    Col2    Col3    ...     Coln
Row1   A       7        2              n
Row2   B       5        10             n
Row3   C       3        5              n

如您所見,它有 n 列。 我正在嘗試使用“Col1”列和其他每個列創建 n 個數據幀,然后我將調用每個 dataframe 或應用於所有 function 它看起來像這樣:

df1:

      Col1    Col2
Row1   A       7 
Row2   B       5 
Row3   C       3 

df2:

      Col1    Col3
Row1   A       2 
Row2   B       10 
Row3   C       5 


... 

dfn:

      Col1    Coln
Row1   A       n 
Row2   B       n 
Row3   C       n 

我知道我可以手動使用 .iloc[:,n] 但這對於 n 列是不切實際的。

所以,我用字典嘗試了這種方式:

columns_list = df.columns.values.tolist()
d = {}

for name in columns_list:
  for i in range(1, len(df.columns)+1):
    d[name] = pd.DataFrame(data = (df1["Col1"],df.iloc[:,i]), columns = ["XYZ", "ABC"])

壞消息:不起作用。

我也嘗試過使用 function:

df_base = pd.DataFrame(data = df.iloc[:,0])
def particion(df):
    for i in range(1, len(df.columns)+1): 
        df["df_" + str(i)] = df_base.join(df.iloc[:,i]) 

又是一個壞消息:不起作用。

我已經完成了我的研究,但找不到專門有同樣事情的人。

有人知道我能做什么嗎?

所以你想從創建一個變量名列表開始,這可以通過列表理解來完成。 以 n=5 為例

n = 5
variable_names = [f"df{i}" for i in range(1,n+1)]
print(variable_names) # Output: ['df1', 'df2', 'df3', 'df4', 'df5']

從這里您可以創建列名列表並為您的第一個列名創建一個常量變量

FIRST_COLUMN_NAME = list(df.columns)[0]
column_names = list(df.columns)[1:]

然后您可以使用globals()zip()來迭代並創建變量:

for variable, column_name in zip(variable_names, column_names):
    globals()[variable] = df[[FIRST_COLUMN_NAME, column_name]]

使用測試 dataframe:

   col1  col2  col3  col4  col5  col6
0     1     2     3     4     5     6
1     2     3     4     5     6     7

我收到以下輸出:

>>> print(df1)
   col1  col2
0     1     2
1     2     3
>>> print(df2)
   col1  col3
0     1     3
1     2     4
>>> print(df3)
   col1  col4
0     1     4
1     2     5

等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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