我想实现像DataFrame.corr()
这样可以将函数应用于成对列的东西。
例如。
我有一个功能:
def func(x, y):
pass
我想将func
应用于a_pd
中的两列的每个组合(Pandas.DataFrame
的类型)。我已经找到了一种方法,创建一个新函数wap_func
来包装func
:
def wap_func(x):
for i in range(len(x)):
for j in range(i+1, len(x)):
func(x[i], x[j])
res = a_pd.apply(wap_func, axis=1)
虽然问题似乎已经解决了,但这并不方便。如果可以像a_pd.corr()
那样完成,那可能会更好。
答案 0 :(得分:0)
您是否考虑过使用itertools.combinations
模块?
import pandas as pd
from itertools import combinations
df = pd.DataFrame([[1,2,3], [2,3,4], [3,5,7]], columns = ['A', 'B', 'C'])
print(df)
A B C
0 1 2 3
1 2 3 4
2 3 5 7
稍稍不同地定义功能,以便可以更无缝地应用应用
def func(xy):
x, y = xy
return x+y
使用itertools.combinations
模块获取所需列的所有组合,依次浏览每个组合,然后应用先前定义的功能
for combi in combinations(df.columns, 2):
df['_'.join([i for i in combi])] = df[[i for i in combi]].apply(func, axis=1, result_type='expand').transpose().values
print(df)
A B C A_B A_C B_C
0 1 2 3 3 4 5
1 2 3 4 5 6 7
2 3 5 7 8 10 12