您好我有两个数据帧。他们有一些共同的指数。我想将两个原始日期帧转换为两个仅包含公共索引的新日期帧。你能帮助我实现这个目标吗?这是一个例子。
df1 = pd.DataFrame({'one' : pd.Series([1,3,5], index=['a', 'b', 'c']),
....: 'two' : pd.Series([2,4,6], index=['a', 'b', 'c']),
....: 'three' : pd.Series([-4,-3,-2], index=['a','b', 'c'])});
df2=pd.DataFrame({'x' : pd.Series([1,3,5], index=['b', 'c', 'd']),
....: 'y' : pd.Series([2,4,6], index=['b', 'c', 'd']),
....: 'z' : pd.Series([-3,-2,-1], index=['b', 'c', 'd'])});
print(df1)
print(df2)
所以你可以看到df1和df2如下。
one three two
a 1 -4 2
b 3 -3 4
c 5 -2 6
x y z
b 1 2 -3
c 3 4 -2
d 5 6 -1
我希望看到它们变得像
one three two
b 3 -3 4
c 5 -2 6
x y z
b 1 2 -3
c 3 4 -2
答案 0 :(得分:0)
您可以使用.join()
:
df1.join(df2, how='inner')[df1.columns]
one three two
b 3 -3 4
c 5 -2 6
答案 1 :(得分:0)
我会将Index.intersection与boolean indexing结合使用:
In [73]: mask = df1.index.intersection(df2.index)
In [77]: df1 = df1.ix[mask]
In [78]: df2 = df2.ix[mask]
In [79]: df1
Out[79]:
one three two
b 3 -3 4
c 5 -2 6
In [80]: df2
Out[80]:
x y z
b 1 2 -3
c 3 4 -2
或者您可以使用isin() fution:
In [81]: df1[df1.index.isin(df2.index)]
Out[81]:
one three two
b 3 -3 4
c 5 -2 6
In [82]: df2[df2.index.isin(df1.index)]
Out[82]:
x y z
b 1 2 -3
c 3 4 -2