假設(shè)我有一個包含 2 列的數(shù)據(jù)框: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 value0 0 0.4967141 1 -0.1382642 2 0.6476893 3 1.5230304 4 -0.2341535 5 -0.2341376 6 1.5792137 7 0.7674358 8 -0.4694749 9 0.542560我想把這個系列映射到這個數(shù)據(jù)框:uniq = pd.Series([1,3,5,6], index=[20, 45, 47, 51], name="unique_col")# uniq20 145 347 551 6Name: unique_col, dtype: int64該uniq系列有我不想失去的特殊索引。unique_col在int這里,但在我的現(xiàn)實世界中,它是一個復(fù)雜而獨特的字符串。我想映射unique_col并提取value,我目前這樣做:uniqdf = pd.DataFrame(uniq)mergedf = pd.merge(uniqdf, df, on="unique_col", how="left").set_index(uniq.index)myresult = mergedf["value"]# myresult20 -0.13826445 1.52303047 -0.23413751 1.579213Name: value, dtype: float64這是必要的嗎?有沒有更簡單的方法不涉及pd.merge和從Seriesto轉(zhuǎn)換DataFrame?
2 回答

慕姐4208626
TA貢獻1852條經(jīng)驗 獲得超7個贊
這是你需要的嗎?
s=df.set_index('unique_col').value.reindex(uniq).values
pd.Series(s,index=uniq.index)
Out[147]:
20 -0.138264
45 1.523030
47 -0.234137
51 1.579213
dtype: float64

隔江千里
TA貢獻1906條經(jīng)驗 獲得超10個贊
只需使用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
添加回答
舉報
0/150
提交
取消