在Pandas.DataFrame

时间:2016-10-03 01:53:31

标签: python function pandas apply

我想实现像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()那样完成,那可能会更好。

1 个答案:

答案 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