为每个列对组合查找以前的非零对,并为使用 python 的人创建单独的列

我有一个这样的数据框:


A     B

1     1

0     0

2     3

0     0

0     0

5     4

0     3

0     0

我想添加具有以下条件的另外两列:对于每个 A 和 B 对,先前的非零对值将添加到其他两列中,但第一次在两列中都为零,


例如,输出将类似于:


A     B    C    D

1     1    0    0

0     0    1    1

2     3    1    1

0     0    2    3

0     0    2    3

5     4    2    3

0     3    5    4

0     0    0    3

我可以使用循环来做到这一点,但我希望以大多数 pythonic 方式执行最少的时间。


饮歌长啸
浏览 144回答 2
2回答

慕森王

我分解步骤mask=df.A.ne(0)|df.B.ne(0) # get the target row df1=df[mask] # filter from original dfdf1.index+=1 # get the index increase by one df1.columns=['C','D'] # reassign the columns pd.concat([df,df1],axis=1).ffill().fillna(0).astype(int) # using ffillOut[569]:    A  B  C  D0  1  1  0  01  0  0  1  12  2  3  1  13  0  0  2  34  0  0  2  35  5  4  2  36  0  3  5  47  0  0  0  3

慕雪6442864

我相信一种方法是将A和B用作您的C和D列,将两者都为 0 的行替换为nan,向前填充,最后NaN用 0替换顶部:df[['C','D']] = df[['A','B']].shift()df.loc[(df[['C','D']] == 0).all(1), ['C','D']] = np.nandf.ffill().fillna(0).astype(int)   A  B  C  D0  1  1  0  01  0  0  1  12  2  3  1  13  0  0  2  34  0  0  2  35  5  4  2  36  0  3  5  47  0  0  0  3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python