python - 通过在熊猫组中添加连续数字来填充 NaN
问题描述
我有一个数据框,例如
Groups NAME Number
G1 A 1
G1 B 2
G1 D NaN
G1 D NaN
G1 I 3
G1 H NaN
G2 E 1
G2 E 1
G2 F NaN
G2 J 2
G3 K NaN
G3 L 1
我想通过完成数字来填充组内的 NaN 值
例如,因为 1,2 和 3 已经存在,所以D
inG1
得到了。Number 4
然后 H inG1
得到Number 5
等...
在和我应该得到;
Groups NAME Number
G1 A 1
G1 B 2
G1 D 4
G1 D 4
G1 I 3
G1 H 5
G2 E 1
G2 E 1
G2 F 3
G2 J 2
G3 K 2
G3 L 1
请问有人有想法吗?
解决方案
您可以使用groupby
+ngroup
将每个组/名称标记为具有递增整数的空值。然后我们减去ngroup
组内的最小值(以确定要添加多少)并添加组内已经存在的最大值。
然后我们fillna
用这个系列。
s = df[df['Number'].isnull()].groupby(['Groups', 'NAME']).ngroup()
#2 0 #<- G1/D (Series index is DataFrame index)
#3 0 #<- G1/D
#5 1 #<- G1/H
#8 2 #<- G2/F
#10 3 #<- G3/K
to_fill = (s - s.groupby(df['Groups']).transform('min') + 1
+ df.groupby('Groups')['Number'].transform('max'))
#0 NaN
#1 NaN
#2 4.0
#3 4.0
#4 NaN
#5 5.0
#6 NaN
#7 NaN
#8 3.0
#9 NaN
#10 2.0
#11 NaN
df['Number'] = df['Number'].fillna(to_fill, downcast='infer')
# Groups NAME Number
#0 G1 A 1
#1 G1 B 2
#2 G1 D 4
#3 G1 D 4
#4 G1 I 3
#5 G1 H 5
#6 G2 E 1
#7 G2 E 1
#8 G2 F 3
#9 G2 J 2
#10 G3 K 2
#11 G3 L 1
推荐阅读
- javascript - 使用 javascript/jquery 以模态显示数据
- javascript - 向对象Javascript中的现有键添加值
- python-3.x - 尝试使用 discord.py 给某人起昵称时出现错误消息
- docker-compose - Docker-Compose,如何在 docker-compose 容器之间进行远程登录?
- performance - 允许同时预订而不超额预订
- visual-studio - 当我尝试调试我们特定解决方案的某些应用程序时,Visual Studio 2017 崩溃
- plotly-dash - 下拉列表错误地在回调后一直重置为默认值
- iis - 重定向 URL 中的第二个斜杠
- facebook - 多个帐户使用同一应用程序通过 Facebook Page API 获取页面列表
- random - 我们如何在 Julia 中并行生成随机数?