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