Nik*_*hin 7 python dataframe pandas
我最近开始合作pandas.任何人都可以.corrwith()用Series和解释我的功能行为的差异DataFrame吗?
假设我有一个DataFrame:
frame = pd.DataFrame(data={'a':[1,2,3], 'b':[-1,-2,-3], 'c':[10, -10, 10]})
Run Code Online (Sandbox Code Playgroud)
我想要计算特征'a'和所有其他特征之间的相关性.我可以通过以下方式完成:
frame.drop(labels='a', axis=1).corrwith(frame['a'])
Run Code Online (Sandbox Code Playgroud)
结果将是:
b -1.0
c 0.0
Run Code Online (Sandbox Code Playgroud)
但非常相似的代码:
frame.drop(labels='a', axis=1).corrwith(frame[['a']])
Run Code Online (Sandbox Code Playgroud)
生成绝对不同且不可接受的表格:
a NaN
b NaN
c NaN
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:为什么在DataFrame作为第二个参数的情况下我们得到如此奇怪的输出?
piR*_*red 12
假设您的框架是:
frame = pd.DataFrame(np.random.rand(10, 6), columns=['cost', 'amount', 'day', 'month', 'is_sale', 'hour'])
Run Code Online (Sandbox Code Playgroud)
您希望'cost'和'amount'列与每个组合中的所有其他列相关联.
focus_cols = ['cost', 'amount']
frame.corr().filter(focus_cols).drop(focus_cols)
Run Code Online (Sandbox Code Playgroud)
计算两个DataFrame对象的行或列之间的成对关联.
参数:
其他:DataFrame
轴:{0或'索引',1或'列'},
默认0 0或'index'用于计算逐列,1或'列'用于逐行删除:boolean,default False从结果中删除缺少的索引,默认返回所有的union返回: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
Run Code Online (Sandbox Code Playgroud)
何时other是a DataFrame将与指定的轴匹配axis并关联由另一个轴标识的每个对.如果我们这样做:
frame.drop('a', axis=1).corrwith(frame.drop('b', axis=1))
a NaN
b NaN
c 1.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)
只是c共同点,只c计算其相关性.
在您指定的情况下:
frame.drop(labels='a', axis=1).corrwith(frame[['a']])
Run Code Online (Sandbox Code Playgroud)
frame[['a']]是DataFrame因为它[['a']]现在DataFrame遵循规则,其列必须与其相关的列匹配.但是你明确地下降a,从第一帧,然后用相关DataFrame一无所有a.结果是NaN每列.
corrwith 定义为DataFrame.corrwith(other, axis=0, drop=False),因此axis=0默认情况下 - 即Compute pairwise correlation between columns of two **DataFrame** objects
因此,两个 DF 中的列名/标签必须相同:
In [134]: frame.drop(labels='a', axis=1).corrwith(frame[['a']].rename(columns={'a':'b'}))
Out[134]:
b -1.0
c NaN
dtype: float64
Run Code Online (Sandbox Code Playgroud)
NaN- 意味着(在这种情况下)没有什么可比较/关联的,因为c在otherDF 中没有命名列
如果您传递一个系列,other因为它将被翻译(来自链接,您已在评论中发布)为:
In [142]: frame.drop(labels='a', axis=1).apply(frame.a.corr)
Out[142]:
b -1.0
c 0.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)