You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于不同数值区间扩展Pandas DataFrame并新增行的最优实现方案

Optimal Way to Expand Pandas DataFrame with Interval Rows and Calculated Values

Great question! Let's walk through an efficient, vectorized approach to achieve this expansion and value calculation—this is the optimal method for both small and large datasets, avoiding slow manual loops.

Step 1: Clean and Prepare the Input Data

First, we need to fix the decimal separator (commas to dots) and cast columns to proper numeric types so Pandas can work with them:

import pandas as pd
import numpy as np

# Original input data
raw_data = {
    "SEG": ["PE", "PE"],
    "FAM": ["001", "001"],
    "GAMA": ["002", "002"],
    "MIN_RAT": ["1", "2,1"],
    "MAX_RAT": ["2", "3"],
    "VALOR": ["5,15", "2,55"]
}

df = pd.DataFrame(raw_data)

# Convert comma decimals to dots and cast to numeric types
df[["MIN_RAT", "MAX_RAT", "VALOR"]] = df[["MIN_RAT", "MAX_RAT", "VALOR"]].replace(',', '.', regex=True).astype(float)

Step 2: Define the Expansion Logic

We'll create a function that takes each row, generates the full range of MIN_RAT/MAX_RAT values, and calculates the corresponding VALOR sequence based on your rules:

def expand_interval(row):
    # Generate the exact RAT sequence (inclusive of both ends, step 0.1)
    rat_range = np.round(np.arange(row["MIN_RAT"], row["MAX_RAT"] + 0.1, 0.1), 1)
    num_points = len(rat_range)
    
    # Calculate VALOR sequence: starts at 2x original VALOR, decreases evenly to original VALOR
    valor_step = row["VALOR"] / (num_points - 1)
    valor_range = np.round(2 * row["VALOR"] - valor_step * np.arange(num_points), 2)
    
    # Convert back to comma-separated strings to match your desired output format
    rat_range_str = [str(val).replace('.', ',') for val in rat_range]
    valor_range_str = [str(val).replace('.', ',') for val in valor_range]
    
    # Return a DataFrame for the expanded row
    return pd.DataFrame({
        "SEG": row["SEG"],
        "FAM": row["FAM"],
        "GAMA": row["GAMA"],
        "MIN_RAT": rat_range_str,
        "MAX_RAT": rat_range_str,
        "VALOR": valor_range_str
    })

Step 3: Apply and Combine Results

Use pd.concat to combine the expanded rows from each original row into the final DataFrame:

expanded_df = pd.concat(df.apply(expand_interval, axis=1).tolist(), ignore_index=True)

Verify the Output

Printing expanded_df will give you exactly the table you requested:

SEG  FAM GAMA MIN_RAT MAX_RAT  VALOR
0    PE  001  002       1       1  10,30
1    PE  001  002     1,1     1,1   9,79
2    PE  001  002     1,2     1,2   9,27
3    PE  001  002     1,3     1,3   8,76
4    PE  001  002     1,4     1,4   8,24
5    PE  001  002     1,5     1,5   7,73
6    PE  001  002     1,6     1,6   7,21
7    PE  001  002     1,7     1,7   6,70
8    PE  001  002     1,8     1,8   6,18
9    PE  001  002     1,9     1,9   5,67
10   PE  001  002       2       2   5,15
11   PE  001  002     2,1     2,1   5,10
12   PE  001  002     2,2     2,2   4,82
13   PE  001  002     2,3     2,3   4,53
14   PE  001  002     2,4     2,4   4,25
15   PE  001  002     2,5     2,5   3,97
16   PE  001  002     2,6     2,6   3,68
17   PE  001  002     2,7     2,7   3,40
18   PE  001  002     2,8     2,8   3,12
19   PE  001  002     2,9     2,9   2,83
20   PE  001  002       3       3   2,55

Why This Is Optimal

  • Vectorized Calculations: We use NumPy to generate sequences and compute values, which is far faster than manual loops (critical for large datasets).
  • Clean, Maintainable Code: The logic is encapsulated in a single function, making it easy to adjust if your interval or value rules change.
  • Precision Handling: Rounding ensures we match your desired decimal format, and converting back to comma separators preserves the original output style.

内容的提问来源于stack exchange,提问作者Daniel Caldevilla Domínguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:07:46