ฉันมีวัตถุ pandas.DataFrame ต่อไปนี้ที่ให้ความแปรปรวนร่วมระหว่างปัจจัย:
import pandas as pd
df = pd.DataFrame({"factor1": ["A", "A", "A", "B", "B", "C"],
"factor2": ["A", "B", "C", "B", "C", "C"],
"covar": [-1.2, -1, 2, 3.4, -4, 6.2]})
วัตถุประสงค์ของฉันคือฟอร์แมต DataFrame ใหม่ให้เป็นค่าบวกแบบกึ่งแน่นอนความแปรปรวนร่วม numpy.ndarray
ฉันได้พัฒนาวิธีแก้ปัญหาที่ใช้งานได้ แต่มันช้ามาก:
unique_factors = df.factor1.unique()
F = pd.DataFrame(columns=unique_factors, index=unique_factors)
for index, row in df.iterrows():
F.loc[row["factor1"], row["factor2"]] = row["covar"]**2
F.loc[row["factor2"], row["factor1"]] = row["covar"]**2 #inefficient
F = F.to_numpy()
ผลลัพธ์ที่ได้คือ:
[[1.44 1.0 4.0 ]
[1.0 11.559999999999999 16.0 ]
[4.0 16.0 38.440000000000005]]
ฉันหวังว่าฉันจะสามารถใช้ประโยชน์จากวิธีการดั้งเดิมของ numpy เพื่อให้บรรลุวัตถุประสงค์ของฉันได้อย่างมีประสิทธิภาพมากขึ้น อย่างน้อยที่สุด ฉันอยากจะลบบรรทัดที่มีความคิดเห็น #inefficient
ออก และสะท้อนเมทริกซ์สามเหลี่ยมด้านบนเกี่ยวกับเส้นทแยงมุม ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก