python - Pandas DataFrame 中的链接元素
问题描述
再会!
由于过滤,我有一个带有非连续索引的 pandas DataFrame“mapSubset”子集。DataFrame 包含“键”值。
mapSubset val key 0 12 0 2 18 1 4 24 2 6 30 3 8 36 4
在pandas DataFrame“link”中,它包含与“mapSubset”DataFrame中的“key”值对应的“key”值,我想从“mapSubset”(DataFrame)中添加相应的索引。
link key 0 4 1 2 2 0
预期输出:
link key keyIndex 0 4 8 1 2 4 2 0 0
我尝试了以下方法:
import pandas as pd
import numpy as np
# prepare dummy data
mapFull = pd.DataFrame()
mapFull['val'] = list(range(12,40,3))
mapSubset = mapFull[mapFull.val % 2 == 0]
mapSubset['key'] = list(range(len(mapSubset)))
link = pd.DataFrame()
link['key'] = [4, 2, 0]
# fill 'keyIndex' values into "link" DataFrame
# try No. 1:
# link['keyIndex'] = mapSubset.index[mapSubset.loc[:, 'key'] == link.loc[:, 'key']]
# --> ValueError: Can only compare identically-labeled Series objects
# try No. 2:
link['keyIndex'] = 9999
for pos in range(len(link)):
ii = mapSubset.index[mapSubset.loc[:,'key'] == link.loc[pos,'key']][0]
link.loc[pos,'keyIndex'] = ii
尝试 1 导致
ValueError:只能比较标签相同的系列对象
从技术上讲,我在“尝试 2 号”方面取得了成功,尽管这是一个丑陋的解决方法。
此外
SettingWithCopyWarning:试图在 DataFrame 中的切片副本上设置值。尝试改用 .loc[row_indexer,col_indexer] = value
为mapSubset['key'] = list(range(len(mapSubset)))
.
如何避免错误消息?如何以更好的方式达到预期的结果?
解决方案
你总是可以创建dict
他们映射回来
link['Keyindex'] = link['key'].map(dict(zip(mapSubset.key,mapSubset.index)))
link
Out[12]:
key Keyindex
0 4 8
1 2 4
2 0 0
推荐阅读
- c++ - c++ 函数在 f() + g() 中调用顺序
- python - 获取具有多边形结构的列表的最小值
- javascript - 如何在浏览器的警告框中显示大文本并防止文本修剪?
- python - 为什么我已经安装了 Kivy,却不断收到 ModuleNotFoundError?
- spring - Spring Security OAuth 和 Cucumber 访问被拒绝
- xml - 合并与节点名称中的“_LIST”共享相同名称的 XML 节点以及根级别
- c# - 检索时 ASP.NET Core 2.1 Cookie 项为空
- python - 字典中的插入顺序和重复键
- c# - 使用 Adobe Illustrator 和 C# 进行动态内容替换
- java - 使用 install4j 以编程方式检查 mediaFileId