首页 > 解决方案 > 根据其他列中给出的值在 pandas 数据帧上生成 n 数量的新行

问题描述

因此,我有以下示例数据框(为了清晰/简单起见,仅包含一行):

df = pd.DataFrame({'base_number': [2],
                   'std_dev': [1]})
df['amount_needed'] = 5
df['upper_bound'] = df['base_number'] + df['std_dev']
df['lower_bound'] = df['base_number'] - df['std_dev']

对于每个给定的行,我想生成行数,使得每行的总数是由给出的数字df['amount_needed'](在这个例子中是 5)。我希望这 5 个新行分布在由df['upper_bound']和给出的范围内df['lower_bound']。因此,对于上面的示例,我希望将以下结果作为输出:

df_new = pd.DataFrame({'base_number': [1, 1.5, 2, 2.5, 3]})

当然,这个过程将针对更大数据框中的所有行完成,还有许多与这个特定问题无关的其他列,这就是为什么我试图找到一种方法来自动化这个过程。

标签: pythonpandasdataframe

解决方案


一行df将创建一个系列(或一个数据框)。这是迭代df并使用您指定的值创建系列的一种方法:

for row in df.itertuples():
    arr = np.linspace(row.lower_bound, 
                      row.upper_bound, 
                      row.amount_needed)
    s = pd.Series(arr).rename('base_number')
    
print(s)

0    1.0
1    1.5
2    2.0
3    2.5
4    3.0
Name: base_number, dtype: float64

推荐阅读