python - 为每个列对组合查找以前的非零对,并为使用 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
我可以使用循环来做到这一点,但我希望以大多数 Python 方式实现最少的执行时间。
解决方案
我相信一种方法是仅移位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.nan
df.ffill().fillna(0).astype(int)
A B C D
0 1 1 0 0
1 0 0 1 1
2 2 3 1 1
3 0 0 2 3
4 0 0 2 3
5 5 4 2 3
6 0 3 5 4
7 0 0 0 3
推荐阅读
- google-api - 无法访问 GSuite 组 - 错误代码 400
- r - 如何解决“无法解析”问题以使用 bigrquery 下载表
- firebase - 有没有办法在创建时获取文档的时间戳
- arrays - 如何通过子文档和文档查找并且更新正在推送子文档
- c# - 验证 json 以确定 NJsonSchema C# 中的帖子不足
- html - 我正在尝试将 bootsrap 添加到我的 html 中,但是一旦我输入链接,我的单独 css 就停止工作了?
- django - 在 Django 中定义蓝图分组对象
- python - 使用右边距调整器输出格式
- python - 将列表数组转换为 Keras 输入
- excel - 匹配逗号分隔值和计数中的数字