[英]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.