首页 > 解决方案 > 填写列

问题描述

我有以下数据:

1)

1 1
1 3
1 5
2 1
2 2

我需要做的是像这样填写缺失的行:

1 1
1 2
1 3
1 4
1 5
2 1
2 2

之后我需要填充一个新列,以便新行为零,旧行为 1,如下所示:

1 1 1
1 2 0
1 3 1
1 4 0
1 5 1
2 1 1
2 2 1

之后我必须将最后一列转换成这样的一行:

1,0,1,0,1,1,1

我被困在第一步,不知道如何检查和填写条目,所以我不能真正给你一个我的工作例子......谢谢你的帮助!

标签: pythonmultiple-columns

解决方案


你可以试试这个:

import pandas as pd
import numpy as np

df=pd.DataFrame({"x": [1,1,1,2,2], "y": [1,3,5,1,2]})

df["rep"]=np.where(df["y"].lt(df["y"].shift(-1)),df["y"].shift(-1).sub(df["y"]).sub(1), 0)

df=df.loc[df.index.repeat(df["rep"].add(1))]

df["y"]=df["y"].add(df.groupby(level=0)["y"].cumcount())

df["rep"]=df.groupby(level=0)["y"].cumcount().lt(1).astype(int)

df=df.reset_index(drop=True)

以及您正在寻找的输出:

>>> print(df["rep"].T.tolist())
[1, 0, 1, 0, 1, 1, 1]

>>> print(df)
   x  y  rep
0  1  1    1
1  1  2    0
2  1  3    1
3  1  4    0
4  1  5    1
5  2  1    1
6  2  2    1

推荐阅读