在python中如何在dataframe中添加多行

hjqgdpho  于 2023-02-18  发布在  Python
关注(0)|答案(1)|浏览(391)

我有一个 Dataframe (df)如下(实际上有更多的行)。
| | 数|
| - ------|- ------|
| 无|二十一|
| 1个|三十五|
| 第二章|四六七|
| 三个|九六五|
| 四个|小行星2754|
| 五个|34r|
| 六个|小行星5743|
| 七|八四一|
| 八个|小行星8934|
| 九|二百七十五|
我想在行之间插入多个6行,例如,我想在索引0和1的范围内获得6个随机值,并在索引0和1之间添加这6行。索引1和2、2和3也是如此,依此类推,直到结束。

np.linspace(df["number"][0], df["number"][1],8)

是否有函数或任何其他方法在所有现有的9行之间生成6个额外的行,因此最终的行数将不是9,而是64行(添加54行后)?

6uxekuva

6uxekuva1#

您可以尝试以下操作:

from random import uniform

def rng_numbers(row):
    left, right = row.iat[0], row.iat[1]
    n = left
    if pd.isna(right):
        return [n]
    if right < left:
        left, right = right, left
    return [n] + [uniform(left, right) for _ in range(6)]

df["number"] = (
    pd.concat([df["number"], df["number"].shift(-1)], axis=1)
    .apply(rng_numbers, axis=1)
)
df = df.explode("number", ignore_index=True)
  • 首先创建一个包含2列的 Dataframe ,这2列构成间隔边界:number列和number列向前移位1。
  • 然后.apply将函数rng_numbers应用于新 Dataframe 的行:rng_numbers首先对区间边界进行排序,然后返回一个列表,该列表从列number中的相应项开始,然后是区间中的许多随机数num_rows。在最后一行中,左边界是NaN(由于.shift(-1)):在这种情况下,该函数返回没有随机数的列表。
  • 然后在新列number上添加.explodedf

您可以使用NumPy执行类似的操作,它可能更快:

rng = np.random.default_rng()

limits = pd.concat([df["number"], df["number"].shift(-1)], axis=1)
left = limits.min(axis=1).values.reshape(-1, 1)
right = limits.max(axis=1).values.reshape(-1, 1)
df["number"] = (
    pd.Series(df["number"].values.reshape(len(df), 1).tolist())
    + pd.Series(rng.uniform(left, right, size=(len(df), 6)).tolist())
)
df["number"].iat[-1] = df["number"].iat[-1][:1]
df = df.explode("number", ignore_index=True)

相关问题