我有两个DataFrame,我希望根据与df2
列名称相交的列名来对df1
进行分组。在R
这很容易。
R
代码:
df1 <- data.frame(a=rnorm(5), b=rnorm(5))
df2 <- data.frame(a=rnorm(5), b=rnorm(5), c=rnorm(5))
df2[names(df2) %in% names(df1)]
a b
1 -0.8173361 0.6450052
2 -0.8046676 0.6441492
3 -0.3545996 -1.6545289
4 1.3364769 -0.4340254
5 -0.6013046 1.6118360
但是,我不确定如何在pandas
中执行此操作。
pandas
尝试:
df1 = pd.DataFrame({'a': np.random.standard_normal((5,)), 'b': np.random.standard_normal((5,))})
df2 = pd.DataFrame({'a': np.random.standard_normal((5,)), 'b': np.random.standard_normal((5,)), 'c': np.random.standard_normal((5,))})
df2[df2.columns in df1.columns]
这导致TypeError: unhashable type: 'Index'
。什么是正确的方法?
答案 0 :(得分:1)
如果你需要一个真正的交集,由于ggplot
产生一个支持基本集合操作的Index对象,你可以使用.columns
,例如
&
df2[df1.columns & df2.columns]
但是,如果您保证df2[df1.columns.intersection(df2.columns)]
只是df1
的列子集,则可以直接使用
df2
或者如果分配,
df2[df1.columns]
<强>演示强>
df2.loc[:, df1.columns]
答案 1 :(得分:1)
等价物是:
df2[df1.columns.intersection(df2.columns)]
Out:
a b
0 -0.019703 0.379820
1 0.040658 0.243309
2 1.103032 0.066454
3 -0.921378 1.016017
4 0.188666 -0.626612
使用此功能,如果df1
中的df2
中的列不存在,则不会出现KeyError。