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

时间:2019-04-22 16:14:28

标签: python pandas merge

假设我有一个包含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_colint中,但在我的现实世界中,它是一个复杂且唯一的字符串。

我想映射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和从SeriesDataFrame的转换?

2 个答案:

答案 0 :(得分:2)

这是您需要的吗?

result = a = b;

答案 1 :(得分:1)

只需使用map

uniq.map(df.set_index('unique_col')['value'])

20   -0.138264
45    1.523030
47   -0.234137
51    1.579213
Name: unique_col, dtype: float64