首页 > 解决方案 > 在数据框列中插入与给定行中的数字相等的新行,并在 python 中用 1 填充

问题描述

在验证该行中的 nnumber 是否大于 1 后,我想在数据框中插入行。如果数字大于 1,我想删除该行并在其位置插入与前一行中写入的数字相同的行数,并用一个填充这些新行,同时复制其他列中的其他值并保留它们一样。我试过了:

df['new_col'] = np.where(df['Dead females']> 1 ,True, False )
df[:50]

数据框的开头如下所示:

在此处输入图像描述

值大于 1 的行与第 46 行类似:

在此处输入图像描述

我想要的是例如。在 46 处,第三列的条件为真,即大于 1,然后插入 2 行,每行插入 1。迭代并为整个数据框执行此操作。

标签: pythonpandasnumpy

解决方案


输入:

df = pd.DataFrame({'Age in days':[45, 46, 47],
                    'Dead females':[0,2,1],
                    'Censored':[0,1,0],
                    'Fly Line':['CS 0.5 LS F','CS 0.5 LS F','CS 0.5 LS F']})

df
   Age in days  Dead females    Censored       Fly Line
0           45             0           0    CS 0.5 LS F
1           46             2           1    CS 0.5 LS F
2           47             1           0    CS 0.5 LS F

现在转换Dead females为列表如下:

df['Dead females'] = df['Dead females'].apply(lambda x : [1]*x)

然后explode在该列上使用:

df = df.explode('Dead females', ignore_index = True)

np.nan然后在该列中替换0以获得最终的df。

df['Dead females'].replace(np.nan, 0, inplace=True)

输出:

    Age in days Dead females    Censored       Fly Line
0            45            0           0    CS 0.5 LS F
1            46            1           1    CS 0.5 LS F
2            46            1           1    CS 0.5 LS F
3            47            1           0    CS 0.5 LS F

推荐阅读