python - 在 df.loc 过滤条件中填充缺失数据?
问题描述
我在过滤的df中填充nan时遇到以下问题。让我们来看看这个 df :
condition value
0 A 1
1 B 8
2 B np.nan
3 A np.nan
4 C 3
5 C np.nan
6 A 2
7 B 5
8 C 4
9 A np.nan
10 B np.nan
11 C np.nan
如何根据条件用最后一个值的值填充 np.nan,以便得到以下结果?
condition value
0 A 1
1 B 8
2 B 8
3 A 1
4 C 3
5 C 3
6 A 2
7 B 5
8 C 4
9 A 2
10 B 5
11 C 4
我使用以下代码失败了(ValueError:无法使用多维键进行索引):
conditions = set(df['condition'].tolist())
for c in conditions :
filter = df.loc[df['condition'] == c]
df.loc[filter, 'value'] = df.loc[filter, 'value'].fillna(method='ffill')
来自维也纳的 THX 和 BR
解决方案
如果你的值是实际的NaN
,你只需要做一个groupby
on condition
,然后调用ffill
(它本质上是一个包装器fillna(method='ffill')
):
df.groupby('condition').ffill()
返回:
condition value
0 A 1
1 B 8
2 B 8
3 A 1
4 C 3
5 C 3
6 A 2
7 B 5
8 C 4
9 A 2
10 B 5
11 C 4
如果您的值是字符串np.nan
,如您的示例中所示,则在之前替换它们:
df.replace('np.nan', np.nan, inplace=True)
df.groupby('condition').ffill()
推荐阅读
- c# - 用于统一的顶级自动化/脚本/api?
- python - 将对象集群替换为生成最高 SI 分数的新集群
- c# - 在 Unity 中使用 Firebase 云消息传递时如何获取当前活动?
- javascript - 比较同一对象中的 2 个数组键和值
- c++ - 有没有办法将无向图转换为 (x,y) 坐标系?
- amazon-web-services - AWS Amplify - Cognito,如何知道我的用户有权执行某些操作?
- python - 使用 Python 从新闻网站上抓取评论。将评论隐藏在“显示更多”下的问题
- r - 你能用只有一个水平的自变量在 r 中进行线性回归吗?
- laravel - 多个文件输入类型覆盖选定的文件并仅上传最后一个选定的文件
- kotlin - Kotlin:运算符“!=”不能应用于“字符串?” 和'Char.Companion'