【发布时间】:2017-09-05 12:40:03
【问题描述】:
我有两个数据框,像这样:
df1 = pd.DataFrame()
df1['v1'] = [5,7,2,4,9,7,2]
df1['v2'] = ["a1", 'nan', "a2", "a3", "a5", "a6", "a9"]
v1 v2
0 5 a1
1 7 nan
2 2 a2
3 4 a3
4 9 a5
5 7 a6
6 2 a9
和
dfa = pd.DataFrame()
dfa['pc1'] = np.random.rand(5)
dfa['pc2'] = np.random.rand(5)
dfa['idx'] = ["a1", "a2", "a3", "a6", "a9"]
df2 = dfa.set_index('idx')
pc1 pc2
idx
a1 0.048725 0.050773
a2 0.289110 0.302272
a3 0.720966 0.663910
a6 0.021616 0.308114
a9 0.205923 0.583591
df1 有一个列 v2,其中包含与 df2 的索引匹配的字符值。但它也有 nan 并且可能包含 df2 中不存在相应行名的字符。
我现在想将这些数据框合并为一个,如下所示:
v1 v2 pc1 pc2
0 5 a1 0.048725 0.050773
1 7 nan nan nan
2 2 a2 0.289110 0.302272
3 4 a3 0.720966 0.663910
4 9 a5 nan nan
5 7 a6 0.021616 0.308114
6 2 a9 0.205923 0.583591
在R 中,使用rownames_to_column(df2, "v2") 和
left_join(df1, .) 函数。
但是我如何在 pandas 中做到这一点?
【问题讨论】:
-
顺便说一句,
set_index调用以某种方式使事情复杂化。这不是必需的,您可以分别为每个帧传递连接参数。因此,如果您使用例如,您始终可以避免按索引加入。reset_index()