如何使用 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
我如何计算美国的第一列 (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