python - 如何在给定条件下用其他行的值填充 DataFrame 的数据?
问题描述
我想填充一些行的值使用其他行的值。
让我举个例子:
In [7]: df = pd.DataFrame([['a', 'b', 'c', 'aa', 'ba'], [1,2,3,np.nan,np.nan]]).T
In [8]: df
Out[8]:
0 1
0 a 1
1 b 2
2 c 3
3 aa NaN
4 bb NaN
我想要的是fill df.loc[3, 1]
价值df.loc[0, 1],
df.loc[4, 1]
和df.loc[1, 1]
因为给定条件('a' and 'aa'(loc[3,1] and loc[0, 1])
具有相同的
first 'a', 'b' and 'bb' shared 'b')
有什么好的方法可以做到这一点吗?
解决方案
如果可能,将首字母的值与前向填充结合使用:
df[1] = df.groupby(df[0].str[0])[1].ffill()
print (df)
0 1
0 a 1
1 b 2
2 c 3
3 aa 1
4 ba 2
如果需要用第一个非缺失值替换,请GroupBy.transform
使用GroupBy.first
:
df = pd.DataFrame([['aa', 'b', 'c', 'a', 'ba'], [np.nan,2,3,1,np.nan]]).T
print (df)
0 1
0 aa NaN
1 b 2
2 c 3
3 a 1
4 ba NaN
df[1] = df.groupby(df[0].str[0])[1].transform('first')
print (df)
0 1
0 aa 1
1 b 2
2 c 3
3 a 1
4 ba 2
推荐阅读
- java - 不要将 *.jar 文件上传到工件,除非使用 org.jfrog.buildinfo
- javascript - Typescript / Javascript从具有重复项的数组创建数组并创建具有剩余属性的嵌套数组
- excel - VBA 堆栈溢出
- dictionary - 按列表过滤 Groovy 映射
- gitlab - 在 Gitlab 的合并请求中重新定义变量
- r - 如何在 R 中转换 1970 年之前的日期?
- math - 数学 - Pythag - 圈子
- java - 删除 CSV 文档中字段开头和结尾的引号
- c# - 如何停止输入没有值的readline
- github - Github.com 的 Markdown 已停止显示内联图像