如何使用 Pandas 在多索引数据的特定列之间执行函数

How to perform a function between specific columns of multi-indexed data using Pandas

我如何计算美国的第一列 (a) 和日本的第一列 (d) 之间的相关性,并通过创建计算 (b,e) 和 (c,f) 之间相关性的循环来扩展它,如定义所需的输出。

示例输入:

import pandas as pd
columns = pd.MultiIndex.from_arrays([['US', 'US', 'US', 'JP', 'JP', 'JP'],
                                     ['a', 'b', 'c', 'd', 'e', 'f']], 
                                    names=['cty', 'tenor'])
hier_df = DataFrame(np.random.randn(12, 6), columns=columns)
hier_df

期望的输出:

a       d       0.8
b       e       0
c       f       0.2

如果要使用循环,可以使用zip循环遍历两个子帧:

data = []
for col1, col2 in zip(hier_df['US'], hier_df['JP']):
    data.append((col1, col2, hier_df['US'][col1].corr(hier_df['JP'][col2])))
data = pd.DataFrame(data)
data.to_csv(filename, sep='\t', index=False, header=False)  # write to a tab-seperated file


a d 0.130997264133
b e 0.740703734042
c f 0.033917870807

一种更有效的方法是使用 corrwith。不过,这要求列名相同:

hier_df['US'].corrwith(hier_df['JP'].rename(columns={'d': 'a', 'e': 'b', 'f': 'c'}))
Out: 
tenor
a    0.130997
b    0.740704
c    0.033918
dtype: float64