python - 如何复制低于现有值的值,直到下一个非空白值?
问题描述
我试着搜索了一下,但很难用语言来描述它,所以很难找到(并且用正确的语言)。
鉴于:
A B C
1 1
2
3
4 2
5
6 3
7
8
9
0
想要的结果:
A B C D
1 1 1
2 1
3 1
4 2 2
5 2
6 3 3
7 3
8 3
9 3
0 3
解决方案
您的 DataFrame 在“空”单元格中没有NaN,所以我假设:
- 每列的dtype是object(实际上是string),
- “空”单元格包含空字符串或空格。
在这种情况下,一种可能的解决方案是:
- 用NaN替换空字符串/空格,
- 调用填充。
就像是:
df['D'] = df.A.replace(r'^\s*$', np.nan, regex=True).ffill()
编辑
如果要“向下复制”的值可以在任何列中(不仅在A中),那么解决方案是:
df['D'] = df.replace(r'^\s*$', np.nan, regex=True).ffill(axis=1)\
.iloc[:, -1].ffill()
与Anky在他的评论中提出的类似。
推荐阅读
- arrays - 如何从 char 数组中删除前 80 个字符?
- reactjs - 我正在尝试在用户提供的日期和时间以本地反应方式发送本地计划推送通知
- javascript - 如何更改mxgraph中虚线的颜色
- reactjs - 将所有坐标适合地图的边界在地图框中做出反应
- github - 使用具有特定分支的 github ftp 部署操作
- linear-algebra - 特征库是否执行高斯归约以解决齐次系统?
- apache-kafka - 我无法在 Kafka 集群中进行 Kerberos 身份验证
- c# - System.IO.IOException: '参数不正确。' 当 NamedPipeClientStreamReadMode = PipeTransmissionMode.Message
- python - 如何在 imap_tools python 中使用“mark_seen = False”将电子邮件标记为已查看?
- mongodb - docker 中的 quantaxis 无法使用本地化的 mongodb 进行身份验证