猿问

熊猫通过数据框的 2 列将一个系列映射到另一个系列

假设我有一个包含 2 列的数据框:


indexes = pd.Series(np.arange(10))

np.random.seed(seed=42)

values = pd.Series(np.random.normal(size=10))

df = pd.DataFrame({"unique_col": indexes, "value": values})


# df:

   unique_col     value

0           0  0.496714

1           1 -0.138264

2           2  0.647689

3           3  1.523030

4           4 -0.234153

5           5 -0.234137

6           6  1.579213

7           7  0.767435

8           8 -0.469474

9           9  0.542560

我想把这个系列映射到这个数据框:


uniq = pd.Series([1,3,5,6], index=[20, 45, 47, 51], name="unique_col")


# uniq

20    1

45    3

47    5

51    6

Name: unique_col, dtype: int64

该uniq系列有我不想失去的特殊索引。unique_col在int这里,但在我的现实世界中,它是一个复杂而独特的字符串。


我想映射unique_col并提取value,我目前这样做:


uniqdf = pd.DataFrame(uniq)

mergedf = pd.merge(uniqdf, df, on="unique_col", how="left").set_index(uniq.index)

myresult = mergedf["value"]


# myresult

20   -0.138264

45    1.523030

47   -0.234137

51    1.579213

Name: value, dtype: float64

这是必要的吗?有没有更简单的方法不涉及pd.merge和从Seriesto转换DataFrame?


蝴蝶刀刀
浏览 143回答 2
2回答

慕姐4208626

这是你需要的吗?s=df.set_index('unique_col').value.reindex(uniq).valuespd.Series(s,index=uniq.index)Out[147]: 20   -0.13826445    1.52303047   -0.23413751    1.579213dtype: float64

隔江千里

只需使用map:uniq.map(df.set_index('unique_col')['value'])20   -0.13826445    1.52303047   -0.23413751    1.579213Name: unique_col, dtype: float64
随时随地看视频慕课网APP

相关分类

Python
我要回答