![](/img/trans.png)
[英]Better way to apply function to every combination of two columns in Pandas.DataFrame
[英]Apply function to every combination of columns
我有這個 dataframe 值(忽略數字)
| A | B || C | D |
| 5 | 7 ||15 | 9 |
|13 | 12||15 | 9 |
|15 | 9 ||15 | 9 |
| 5 | 7 ||15 | 9 |
|13 | 12||15 | 9 |
我想應用一個函數(y,x),其中(y,x)指的是 dataframe 中的每一對可能的列(其中 y 與 x 不同),然后將 output 從 ZC1C425Z074E68384F1111145Z074aC 保存到字典中。
dict = {
"A_B": ["blah", "blah", "blah"]
"A_C": ["blah", "blah", "blah"]
"A_D': ["blah", "blah", "blah"]
}
字典將 output ["blah", "blah", "blah"] 存儲為字典中的列表。
有什么辦法可以做到這一點嗎?
我想我必須為列的每個可能組合創建一個 for 循環,然后將 function 應用於此,但我不確定如何解決這個問題。 感謝任何幫助。 謝謝!
您可以使用itertools
獲取所有唯一的列對,然后創建一個循環以對它們應用操作:
import itertools
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(4,4), columns=['A','B','C','D'])
output = {}
for x, y in itertools.combinations(df.columns, 2):
output[f'{x}_{y}'] = (df[x] * df[y]).to_list()
print(output)
結果:
{'A_B': [0.5373750437559887,
0.12077240904054208,
0.02128148027667116,
0.007578133428536173],
'A_C': [0.039529837951733815,
0.6965081691767399,
0.04341804790548652,
0.06767107788435821],
'A_D': [0.07986784691848457,
0.6510775100893785,
0.05386515105603322,
0.031171732070095028],
'B_C': [0.03800661675931452,
0.1710653815593833,
0.136685425122361,
0.07191805478874766],
'B_D': [0.0767902629130131,
0.15990741762557956,
0.16957420765210682,
0.033128042362621186],
'C_D': [0.00564876743811126,
0.9222041985664514,
0.3459618868451074,
0.2958261893932231]}
在這里,操作是乘法*
,但您可以將其替換為其他一些 function,例如:
# find the maximum across the two columns
output = {}
for x, y in itertools.combinations(df.columns, 2):
output[f'{x}_{y}'] = np.max(pd.concat([df[x], df[y]]))
print(output)
# {'A_B': 0.8884565587865458, 'A_C': 0.8687553149454967, 'A_D': 0.9452913147551872, 'B_C': 0.8884565587865458, 'B_D': 0.9452913147551872, 'C_D': 0.9452913147551872}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.