首页 > 解决方案 > 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))).

如何避免错误消息?如何以更好的方式达到预期的结果?

标签: pythonpandasdataframe

解决方案


你总是可以创建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

推荐阅读