簡體   English   中英

將函數應用於 Pandas.DataFrame 中兩列的每個組合的更好方法

[英]Better way to apply function to every combination of two columns in Pandas.DataFrame

我想實現一個類似於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()那樣完成,那就更好了。

您是否考慮過使用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

稍微不同地定義您的函數,以便您可以更無縫地使用 apply

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM