簡體   English   中英

根據重復的列值提取數據幀行並將它們存儲在新的數據幀中

[英]Extract dataframe rows and store them in new dataframes based on repeated column value

假設我有這個數據框:

Action |   X1 |   X2 | X3
--------------------------
A0     | 0.1  |  0.4 | 0.7
A0     | 0.2  |  0.5 | 0.8
A0     | 0.3  |  0.6 | 0.9
A1     | 1.0  |  1.2 | 1.3
A1     | 1.1  |  1.5 | 1.6
A0     | 0.1  |  0.4 | 0.7
A0     | 0.2  |  0.5 | 0.8
A2     | 0.3  |  0.6 | 0.9
A2     | 0.1  |  0.4 | 0.7
A2     | 0.2  |  0.5 | 0.8
A2     | 0.3  |  0.6 | 0.9

我想在單獨的數據幀上存儲具有相同Action列值的行,即使列值重復(意味着不在同一數據幀中存儲具有相同列值的行)。 例如,我想每次將它們存儲在一個單獨的列表中,然后將它們全部附加到列表中。 所以作為最終結果,我會有一個包含多個數據幀的列表。

在此示例中,我想存儲 0 -> 2 的行,其中Action列等於新數據框中的A0 然后將 3 -> 4 的行存儲在另一個新數據框中,其中Action列等於A1 然后再次存儲來自 5 -> 6 的行,其中Action列等於A0與第一個數據幀分開的另一個新數據幀。 然后將所有數據幀存儲在列表中。

這是我嘗試過的:

grouped = df.groupby(df.Action)
A0 = grouped.get_group("A0")

但這會將具有相同列值的所有行存儲在一起。

在此示例中,我將有 4 個單獨的數據幀,如下所示:

D1:

Action |   X1 |   X2 | X3
--------------------------
A0     | 0.1  |  0.4 | 0.7
A0     | 0.2  |  0.5 | 0.8
A0     | 0.3  |  0.6 | 0.9

D2:

Action |   X1 |   X2 | X3
--------------------------
A1     | 1.0  |  1.2 | 1.3
A1     | 1.1  |  1.5 | 1.6

D3:

Action |   X1 |   X2 | X3
--------------------------
A0     | 0.1  |  0.4 | 0.7
A0     | 0.2  |  0.5 | 0.8

D4:

Action |   X1 |   X2 | X3
--------------------------
A2     | 0.3  |  0.6 | 0.9
A2     | 0.1  |  0.4 | 0.7
A2     | 0.2  |  0.5 | 0.8
A2     | 0.3  |  0.6 | 0.9

然后將所有 4 個數據幀(D1、D2、D3 和 D4)存儲在一個列表中。

如果您將所有具有相同值的操作分組(將它們分成 3 個 A0、A1 和 A2 而不是 4 個數據幀),這將是一個單行的 Python 代碼

但就您而言,這將解決您的問題:

#create some data with Names column
data = pd.DataFrame({'Action': ['A0', 'A0', 'A0', 'A1', 'A1', 'A0', 'A0', 'A2', 'A2', 'A2', 'A2'], 'X1' : np.random.rand(11), 'X2' : np.random.rand(11), 'X3' : np.random.rand(11)})

dfs = []
temp_rows = []
current_action = data.iloc[0]['Action']
for i, row in data.iterrows():

  if current_action != row['Action']:
    dfs.append(pd.DataFrame(temp_rows))
    current_action = row['Action']  
    temp_rows = []
  
  temp_rows.append(row)

dfs.append(pd.DataFrame(temp_rows)) # Don't forget this one!

dfs是您的 DataFrame 列表。

暫無
暫無

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

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