小编典典

pandas.DataFrame corrwith()方法

python

我最近开始与一起工作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第二个参数的情况下,我们得到如此奇怪的输出?


阅读 214

收藏
2021-01-20

共1个答案

小编典典

我认为您要寻找的是:

假设您的框架是:

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同样表现于addsubmuldiv,它希望找到一个DataFrameSeries在被传递other,尽管文档只是说DataFrame

otherSeries它的广播沿着指定的轴那个系列和火柴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于每一列。

2021-01-20