我最近开始与一起工作pandas。谁能解释我.corrwith()与Series和在功能行为上的差异DataFrame?
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'列与每种组合中的所有其他列相关联。
'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
计算两个DataFrame对象的行或列之间的成对关联。
参数:
其他 :DataFrame
轴:{0或“索引”,1或“列”},
默认值0 0或’index’用于计算按列,1或’columns’用于按行删除:布尔值,默认False从结果中删除缺少的索引,默认返回所有并集的返回:correls:Series
corrwith同样表现于add,sub,mul,div,它希望找到一个DataFrame或Series在被传递other,尽管文档只是说DataFrame。
corrwith
add
sub
mul
div
other
当other是Series它的广播沿着指定的轴那个系列和火柴axis,默认值为0。这就是为什么以下工作:
axis
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计算了其相关性。
c
在您指定的情况下:
frame[['a']]是DataFrame由于的原因,[['a']]现在按DataFrame规则运行,其中的列必须与其关联的内容匹配。但是你明确地下降a,从第一帧,然后用相关DataFrame一无所有a。结果适用NaN于每一列。
frame[['a']]
[['a']]
a
NaN