按行合并含不同ARIMA阶数的表:列数/列名不同的行绑定需求
Got it, let's work through this ARIMA order table merging task together. You've got two sorted tables of (p,d,q) orders with their frequencies, and you want to combine them into a single two-row table where each row represents one of your original datasets, and columns cover every unique ARIMA order across both tables (with 0 for orders that don't appear in a given table). Here's how to do it clearly, with code examples for common time series tools:
First, let's formalize your input data
Your sorted tables look like this (I've structured them for clarity):
Order1
ARIMA Order Frequency (1,0,1) 4 (1,1,1) 5 (2,1,4) 9 Order2
ARIMA Order Frequency (1,0,1) 1 (3,0,4) 2 (0,1,1) 7 (2,1,2) 10
Core Approach
- Collect all unique ARIMA orders from both tables to use as columns in your final "big table"
- For each original table, map its frequencies to these columns, filling in
0for orders that don't appear in that table - Structure the result so each row corresponds to one of your original tables
Example Implementation in Python (using Pandas)
Pandas is perfect for this kind of tabular alignment task:
import pandas as pd # Define your raw data order1 = pd.DataFrame({ "ARIMA_Order": ["(1,0,1)", "(1,1,1)", "(2,1,4)"], "Frequency": [4, 5, 9] }).set_index("ARIMA_Order") order2 = pd.DataFrame({ "ARIMA_Order": ["(1,0,1)", "(3,0,4)", "(0,1,1)", "(2,1,2)"], "Frequency": [1, 2, 7, 10] }).set_index("ARIMA_Order") # Merge, transpose to get rows as original tables, fill missing frequencies with 0 merged_table = pd.concat([order1, order2], axis=1, keys=["Order1", "Order2"]).T.fillna(0) # Clean up the index for readability merged_table = merged_table.reset_index(level=1, drop=True).rename_axis("Original_Table") print(merged_table)
Output:
(0,1,1) (1,0,1) (1,1,1) (2,1,2) (2,1,4) (3,0,4) Original_Table Order1 0.0 4.0 5.0 0.0 9.0 0.0 Order2 7.0 1.0 0.0 10.0 0.0 2.0
Example Implementation in R (using tidyverse)
If you prefer R, the tidyverse packages handle this just as smoothly:
library(tidyverse) # Define your raw data order1 <- tibble( ARIMA_Order = c("(1,0,1)", "(1,1,1)", "(2,1,4)"), Frequency = c(4, 5, 9), Table = "Order1" ) order2 <- tibble( ARIMA_Order = c("(1,0,1)", "(3,0,4)", "(0,1,1)", "(2,1,2)"), Frequency = c(1, 2, 7, 10), Table = "Order2" ) # Combine and reshape to wide format merged_table <- bind_rows(order1, order2) %>% pivot_wider( names_from = ARIMA_Order, values_from = Frequency, values_fill = 0 ) %>% column_to_rownames("Table") print(merged_table)
Output:
(1,0,1) (1,1,1) (2,1,4) (3,0,4) (0,1,1) (2,1,2) Order1 4 5 9 0 0 0 Order2 1 0 0 2 7 10
Both implementations give you the two-row table you're looking for, making it easy to compare frequency distributions of ARIMA orders across your original datasets.
内容的提问来源于stack exchange,提问作者user8705181

