pandas.DataFrame corrwith()方法
问题内容:
我最近开始与一起工作pandas
。谁能解释我.corrwith()
与Series
和在功能行为上的差异DataFrame
?
假设我有一个DataFrame
:
frame = pd.DataFrame(data={'a':[1,2,3], 'b':[-1,-2,-3], 'c':[10, -10, 10]})
我想计算特征“ a”与所有其他特征之间的相关性。我可以通过以下方式做到这一点:
frame.drop(labels='a', axis=1).corrwith(frame['a'])
结果将是:
b -1.0
c 0.0
但是非常相似的代码:
frame.drop(labels='a', axis=1).corrwith(frame[['a']])
生成绝对不同且不可接受的表:
a NaN
b NaN
c NaN
所以,我的问题是:为什么在DataFrame
第二个参数的情况下,我们得到如此奇怪的输出?
问题答案:
我认为您要寻找的是:
假设您的框架是:
frame = pd.DataFrame(np.random.rand(10, 6), columns=['cost', 'amount', 'day', 'month', 'is_sale', 'hour'])
您希望'cost'
和'amount'
列与每种组合中的所有其他列相关联。
focus_cols = ['cost', 'amount']
frame.corr().filter(focus_cols).drop(focus_cols)
回答您的问题:
计算两个DataFrame对象的行或列之间的成对关联。
参数:
其他 :DataFrame
轴:{0或“索引”,1或“列”},
默认值0
0或’index’用于计算按列,1或’columns’用于按行删除:布尔值,默认False从结果中删除缺少的索引,默认返回所有并集的返回:correls:Series
corrwith
同样表现于add
,sub
,mul
,div
,它希望找到一个DataFrame
或Series
在被传递other
,尽管文档只是说DataFrame
。
当other
是Series
它的广播沿着指定的轴那个系列和火柴axis
,默认值为0。这就是为什么以下工作:
frame.drop(labels='a', axis=1).corrwith(frame.a)
b -1.0
c 0.0
dtype: float64
当other
为时DataFrame
,它将与指定的轴匹配axis
并关联由另一轴标识的每一对。如果我们这样做:
frame.drop('a', axis=1).corrwith(frame.drop('b', axis=1))
a NaN
b NaN
c 1.0
dtype: float64
仅c
存在共同点,并且仅c
计算了其相关性。
在您指定的情况下:
frame.drop(labels='a', axis=1).corrwith(frame[['a']])
frame[['a']]
是DataFrame
由于的原因,[['a']]
现在按DataFrame
规则运行,其中的列必须与其关联的内容匹配。但是你明确地下降a
,从第一帧,然后用相关DataFrame
一无所有a
。结果适用NaN
于每一列。