python - 如何匹配具有给定单列名称的多列并在新列中获取其值?
问题描述
我以前问过一个问题 如何将多个列与给定的单列匹配并在新列中获取其名称?
但现在我想从列名中获取数据:
这是演示数据:
df = pd.DataFrame({"mtc": [1, 2, 3, 4],
"C1": [0.5, 2, 3.5, 5],
"C2": [1, 3, 2.2, 5],
"C3": [1, 3, 2.9, 5],
"C4": [4.1,6, 6, 6]})
d=df[['C1', 'C2', 'C3', 'C4']]
c=(d.div(df.mtc,axis=0)-1)
m = c.ge(-0.15) & c.le(0.15)
df['Near'] = m.idxmax(1).mask(~m.any(1))
df>>
mtc C1 C2 C3 C4 Near
0 1 0.5 1.0 1.0 4.1 C2
1 2 2.0 3.0 3.0 6.0 C1
2 3 3.5 2.2 2.9 6.0 C3
3 4 5.0 5.0 5.0 6.0 NaN
现在我想通过如下查看对应的实际columns
值column Near
:
mtc C1 C2 C3 C4 Near Realvalues
0 1 0.5 1.0 1.0 4.1 C2 1.0
1 2 2.0 3.0 3.0 6.0 C1 2.0
2 3 3.5 2.2 2.9 6.0 C3 2.9
3 4 5.0 5.0 5.0 6.0 NaN NaN
到目前为止,我使用它,但它也df.lookup(df.index, df.Near)
失败了Nan
lookup
deprecated
解决方案
试试看,注意我们以前有lookup,但是pandas将不再支持这个功能sad ..
df['value'] = df.values[df.index,df.columns.get_indexer(df.Near)]
df
Out[27]:
mtc C1 C2 C3 C4 Near value
0 1 0.5 1.0 1.0 4.1 C2 1
1 2 2.0 3.0 3.0 6.0 C1 2
2 3 3.5 2.2 2.9 6.0 C3 2.9
3 4 5.0 5.0 5.0 6.0 NaN NaN
推荐阅读
- android - Android 项目中的默认外部库来自哪里?
- python - 为什么我会收到 KeyError:'Coloring book moana'。这是某种复活节彩蛋吗?
- jetbrains-ide - DataGrip 以漂亮的方式查看 JSON
- javascript - insertAdjacentHTML 代码仅适用于 Firefox
- c# - 通过提供 InvalidOperationException 的导航属性从数据库中获取数据
- python - 生成具有百分位约束的最佳指数分布
- c++ - 为什么在 bash 脚本上运行 Valgrind 会报告内存泄漏?
- ios - 具有同步功能的离线和在线 iOS 应用程序的存储选项
- python-3.x - bigquery python API 中的查询可以使用 python 变量吗?
- jive - 在 Jive 文件系统中找不到文档