मैं है एक dataframe कि इस तरह दिखता है:कुशल तरीका
from random import randint
import pandas as pd
df = pd.DataFrame({"ID": ["a", "b", "c", "d", "e", "f", "g"],
"Size": [randint(0,9) for i in range(0,7)]})
df
ID Size
0 a 4
1 b 3
2 c 0
3 d 2
4 e 9
5 f 5
6 g 3
और क्या मैं प्राप्त करने के लिए चाहते हैं यह (एक मैट्रिक्स हो सकता है के रूप में अच्छी तरह से) है:
sums_df
a b c d e f g
a 8.0 7.0 4.0 6.0 13.0 9.0 7.0
b 7.0 6.0 3.0 5.0 12.0 8.0 6.0
c 4.0 3.0 0.0 2.0 9.0 5.0 3.0
d 6.0 5.0 2.0 4.0 11.0 7.0 5.0
e 13.0 12.0 9.0 11.0 18.0 14.0 12.0
f 9.0 8.0 5.0 7.0 14.0 10.0 8.0
g 7.0 6.0 3.0 5.0 12.0 8.0 6.0
ID
में सभी संभावित जोड़े के लिए Size
मानों का योग है।
अभी के लिए मैं इस सरल लेकिन unefficient कोड है:
sums_df = pd.DataFrame()
for i in range(len(df)):
for j in range(len(df)):
sums_df.loc[i,j] = df.Size[i] + df.Size[j]
sums_df.index = list(df.ID)
sums_df.columns = list(df.ID)
यह इस तरह छोटे उदाहरण के लिए ठीक काम करता है, लेकिन मेरी वास्तविक डेटा के लिए यह बहुत लंबा हो जाता है और मैं इसे नेस्टेड से बचने के लिए संभव है यकीन for
loops। क्या आप ऐसा करने के बेहतर तरीके के बारे में सोच सकते हैं?
किसी भी मदद के लिए धन्यवाद!
बस उत्सुक: क्यों आप इसे ज़रूरत है? –
मेरे पास एक और डेटाफ्रेम है जिसे मैं नेटवर्कएक्स के साथ एक आसन्न मैट्रिक्स के रूप में उपयोग कर रहा हूं (चलिए इसे डीएफ 1 कहते हैं), और मैं df1 तत्व-वार को dums2 प्राप्त करने के लिए sums_df द्वारा "विभाजित" करना चाहता हूं। डीएफ 1 में आईडी के बीच सामान्य तत्वों की संख्या शामिल है, लेकिन मेरे पास प्रत्येक आईडी में तत्वों की संख्या भी है (यहां आकार, और आईडी वास्तव में समूहों की आईडी हैं)। इस तरह मैं डीएफ 2 के साथ उपयोग किए जाने वाले वजन डीएफ 1 का उपयोग आसन्न मैट्रिक्स के रूप में सामान्य तत्वों की गणना के बजाय सामान्य तत्वों के शेयर हैं। मुझे उम्मीद है कि यह काफी स्पष्ट है! – atonnerre